C# 为包含集合的类实现IXmlSerializable
我需要能够用Xml序列化内部类,因此必须实现IXmlSerializable 此类中有两个字符串和一个列表 我知道使用WriteElementString和ReadElementContentAsString读写字符串 但是,我不知道如何在ReadXml和WriteXml方法中读取和写入列表 我如何做到这一点,或者有没有一种方法可以在保持对象的内部可访问性的同时序列化和反序列化对象?只需为列表本身编写一个C# 为包含集合的类实现IXmlSerializable,c#,serialization,xml-serialization,C#,Serialization,Xml Serialization,我需要能够用Xml序列化内部类,因此必须实现IXmlSerializable 此类中有两个字符串和一个列表 我知道使用WriteElementString和ReadElementContentAsString读写字符串 但是,我不知道如何在ReadXml和WriteXml方法中读取和写入列表 我如何做到这一点,或者有没有一种方法可以在保持对象的内部可访问性的同时序列化和反序列化对象?只需为列表本身编写一个元素,然后在项目上循环并将其作为元素写出即可 如果元素是可以XML序列化的类的实例,那么您可
元素,然后在项目上循环并将其作为
元素写出即可
如果元素是可以XML序列化的类的实例,那么您可以为元素的类型创建一个XmlSerializer实例,然后将每个实例序列化到您已经使用的同一个XmlWriter。例如:
public void WriteXml(XmlWriter)
{
WriteStarteElement(“XmlSerializable”);
writer.WriteElementString(“Integer”,Integer.ToString());
writer.writeStart元素(“其他列表”);
WriteAttributeString(“count”,OtherList.count.ToString());
var otherSer=新的XmlSerializer(typeof(OtherClass));
foreach(其他列表中的其他变量)
{
其他序列化(编写器、其他);
}
writer.writeedelement();
writer.writeedelement();
}
公共void ReadXml(XmlReader)
{
reader.ReadStartElement(“XmlSerializable”);
reader.ReadStartElement(“整数”);
整数=reader.ReadElementContentAsInt();
reader.ReadEndElement();
reader.ReadStartElement(“其他列表”);
读者。移动到属性(“计数”);
int count=int.Parse(reader.Value);
var otherSer=新的XmlSerializer(typeof(OtherClass));
对于(int i=0;iList不实现IXmlSerializable,它是可序列化的,因为它是公共访问。我理解像上面所说的那样编写它们,但是我如何在代码中嵌套列表中的项,然后如何在以后从嵌套中移除它们?我应该使用哪些方法来实现这一点?包装器元素存在问题在这里的代码示例(解释如何正确实现ReadXml和WriteXml)中,您可能会发现此链接很有用,我知道我是这么做的
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();
}