我創建了一個方法,接受一個對象,然後嘗試序列化對象到Xml,首先使用XmlSerializer將序列化爲一個字符串,然後將Xml加載回XmlDocument對象以返回該方法。代碼看起來像這樣;C#XML序列化問題
public static XmlDocument ConvertObjectToXMLMessage(object ObjectToConvert)
{
MemoryStream stream = null;
XmlWriter writer = null;
XmlSerializer serializer = null;
XmlDocument xmlDoc = new XmlDocument();
UnicodeEncoding utf = new UnicodeEncoding();
UTF8Encoding utf8 = new UTF8Encoding();
ASCIIEncoding ascii = new ASCIIEncoding();
string result = string.Empty;
try
{
stream = new MemoryStream();
//writer = new StreamWriter(stream, Encoding.Unicode);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
writer = XmlWriter.Create(stream, settings);
serializer = new XmlSerializer(ObjectToConvert.GetType());
serializer.Serialize(writer, ObjectToConvert);
int count = Convert.ToInt32(stream.Length);
Byte[] arr = new Byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
result = utf8.GetString(arr).Trim();
// if this is being used during a debug session, the xml will be written to the Debug Console
#if DEBUG
//blank line before
Debug.WriteLine(string.Empty);
// output result
Debug.Write(result);
//blank line after
Debug.WriteLine(string.Empty);
#endif
xmlDoc.LoadXml(result);
return xmlDoc;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (writer != null)
writer.Close();
}
}
所有工作良好,直到xmlDoc.LoadXml(result)命令。這會引發異常; {「根級別的數據無效,第1行,第1位。」}
正如您所看到的,我已經聲明瞭一些編碼變量。如果我使用ASCII編碼,它可以工作。我需要使用UTF8。
任何想法,爲什麼這是行不通的?我認爲這是因爲在Xml序列化開始時插入了虛假字符。我如何避免這種情況?我可以序列化的類的類型將是實體框架對象或從XSD或WSDL生成的代理分類。
的編輯器的問題{「缺少根元素。」} – Carl 2010-10-04 16:22:05
@Carl什麼是流的長度?只是檢查它不是空的(因爲你會得到相同的錯誤)。 – 2010-10-04 16:24:55
蒂姆,它不是空的。我認爲,但肯定有內容。 – Carl 2010-10-04 16:28:12