gpt4 book ai didi

c# - 为包含集合的类实现 IXmlSerializable

转载 作者:太空狗 更新时间:2023-10-30 00:36:44 24 4
gpt4 key购买 nike

我需要能够对内部类进行 Xml 序列化,因此我必须实现 IXmlSerializable。

这个类有两个字符串和一个列表。

我知道使用 WriteElementString 和 ReadElementContentAsString 读写字符串。

但是,我不知道如何在 ReadXml 和 WriteXml 方法中读取和写入列表。

我该怎么做,或者有什么方法可以序列化和反序列化对象,同时保持其内部可访问性?

最佳答案

只要写一个<List>列表本身的元素,然后遍历项目并将它们写为 <Item>元素。

如果元素是可以被 XML 序列化的类的实例,那么您可以为元素的类型创建一个 XmlSerializer 实例,然后将每个元素序列化为您已经在使用的同一个 XmlWriter。示例:


public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("XmlSerializable");

writer.WriteElementString("Integer", Integer.ToString());

writer.WriteStartElement("OtherList");
writer.WriteAttributeString("count", OtherList.Count.ToString());

var otherSer = new XmlSerializer(typeof(OtherClass));
foreach (var other in OtherList)
{
otherSer.Serialize(writer, other);
}
writer.WriteEndElement();

writer.WriteEndElement();
}

public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("XmlSerializable");

reader.ReadStartElement("Integer");
Integer = reader.ReadElementContentAsInt();
reader.ReadEndElement();

reader.ReadStartElement("OtherList");
reader.MoveToAttribute("count");
int count = int.Parse(reader.Value);

var otherSer = new XmlSerializer(typeof (OtherClass));
for (int i=0; i<count; i++)
{
var other = (OtherClass) otherSer.Deserialize(reader);
OtherList.Add(other);
}

reader.ReadEndElement();
reader.ReadEndElement();
}

关于c# - 为包含集合的类实现 IXmlSerializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com