簡體   English   中英

xml序列化/反序列化問題

[英]Xml Serialization / Deserialization Problem

向流中寫入和讀取xml字符串后,它不再可反序列化。 新的字符串被剪切。

string XmlContent = getContentFromMyDataBase();
XmlSerializer xs = new XmlSerializer(typeof(MyObj));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
char[] ca = XmlContent.ToCharArray();      // still working up to this point.
ms.Position = 0;
sw.Write(ca);
StreamReader sr = new StreamReader(ms);
ms.Position = 0;
string XmlContentAgain = sr.ReadToEnd();
Console.WriteLine(XmlContentAgain);        // (outputstring is too short.)
MyObj theObj = (MyObj)xs.Deserialize(ms);  // Can't deserialize.

關於如何解決此問題或導致問題的任何建議? 我唯一的猜測是存在某種形式的編碼問題,但我不知道如何查找/修復它。

另外,myObj有一個通用的字典成員,該成員通常無法序列化,因此我從Paul Welter竊取了代碼以對其進行序列化。

嘗試使用StringReader進行刷新和處理,甚至更好地簡化代碼:

string xmlContent = getContentFromMyDataBase();
var xs = new XmlSerializer(typeof(MyObj));
using (var reader = new StringReader(xmlContent))
{
    var theObj = (MyObj)xs.Deserialize(reader);
}

注意: getContentFromMyDataBase方法還建議您將XML存儲在要反序列化回對象的數據庫中。 別。

您需要刷新或關閉(隱式刷新)StreamWriter,否則您無法確定它是否已完成寫入基礎流的操作。 這是因為它正在進行一些內部緩沖。

嘗試這個:

using(StreamWriter sw = new StreamWriter(ms)) 
{
    char[] ca = XmlContent.ToCharArray();      // still working up to this point.
    ms.Position = 0;
    sw.Write(ca);
}
StreamReader sr = new StreamReader(ms);
ms.Position = 0;
string XmlContentAgain = sr.ReadToEnd();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM