我有一个看起来像这样的 xml 文件:
<xml>
<A>value</A>
<B>value</B>
<listitems>
<item>
<C>value</C>
<D>value</D>
</item>
</listitems>
</xml>
我有两个对象代表这个 xml:
class XmlObject
{
public string A { get; set; }
public string B { get; set; }
List<Item> listitems { get; set; }
}
class Item : IXmlSerializable
{
public string C { get; set; }
public string D { get; set; }
//Implemented IXmlSerializeable read/write
public void ReadXml(System.Xml.XmlReader reader)
{
this.C = reader.ReadElementString();
this.D = reader.ReadElementString();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("C", this.C);
writer.WriteElementString("D", this.D);
}
}
我使用 XmlSerializer 将 XmlObject 序列化/反序列化为文件。
问题是,当我在我的“子对象”项目上实现自定义 IXmlSerializable 函数时,在反序列化文件时,我总是只在 XmlObject.listitems 集合中获得一个项目(第一个)。 如果我删除 : IXmlSerializable 一切都按预期工作。
我做错了什么?
编辑:我已经实现了 IXmlSerializable.GetSchema,我需要在我的“子对象”上使用 IXmlSerializable 来进行一些自定义值转换。
最佳答案
像这样修改你的代码:
public void ReadXml(System.Xml.XmlReader reader)
{
reader.Read();
this.C = reader.ReadElementString();
this.D = reader.ReadElementString();
reader.Read();
}
首先,您跳过 Item 节点的开头,读取两个字符串,然后读取结束节点,以便读取器位于正确的位置。这将读取数组中的所有节点。
自己修改xml需要注意:)
关于c# - 在集合对象上实现 IXmlSerializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385382/