繁体   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