我有一种奇怪的行为,我甚至不知道如何诊断。
反序列化期间的某些属性未设置(null),即使我在(刚生成的)XML文档中清楚地看到它们。对于类似类型的对象,XML文档看起来结构良好且对称。
看起来它将值设置为某个点,然后停止设置值以及忽略所有其他数据。
只是要指出 - 它正确设置的最后一个值是一个包含另一个对象的类型的对象,由于类似单例的反序列化问题,我必须实现IXmlSerializable
。我指出这一点,因为它可以暗示一些错误,虽然我无法弄清楚它可能是什么。
修改: 我阅读了有关检索序列化程序集和代码的some articles。出于某种原因,它只输出.dll和.pdb文件,但不输出.cs,如文章所述
由于
答案 0 :(得分:1)
好的,解决了!这是一个由两部分组成的解决方案:
首先,在Visual Studio 2012中(或者在.NET 4.5中可能更正确),不够在app.config中为XmlSerialization诊断设置以下内容:
<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="1" />
</switches>
</system.diagnostics>
<system.xml.serialization>
<xmlSerializer tempFilesLocation="c:\foo"/>
</system.xml.serialization>
您还需要添加属性useLegacySerializerGeneration="true"
以生成序列化程序的自动生成的.cs文件
<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="1" />
</switches>
</system.diagnostics>
<system.xml.serialization>
<xmlSerializer tempFilesLocation="c:\foo" useLegacySerializerGeneration="true"/>
</system.xml.serialization>
确保XmlReader(在ReadXml(XmlReader reader)
方法的IXmlSerializable
方法中)在您完成下一个元素的 StartElement 时,而不是在EndElement。换句话说,请务必致电:
reader.ReadEndElement();
因此,xml deseralization reader得到了偏斜的数据并读取了错误位置的所有元素,产生了空值。