gpt4 book ai didi

c# - 如何在自定义 XML 序列化方法中使用默认 XML 序列化

转载 作者:太空狗 更新时间:2023-10-29 22:29:29 26 4
gpt4 key购买 nike

我在 .NET 中有一个实现 IXmlSerializable 的类。我想序列化它的属性,但它们可能是复杂的类型。这些复杂类型与 XML 序列化兼容,但它们自己不实现 IXmlSerializable。从我的 ReadXml 和 WriteXml 方法,我如何调用传递给我的 XmlReader/XmlWriter 上的默认读/写逻辑。

也许代码会让我更清楚我想要什么:

public class MySpecialClass : IXmlSerializable
{
public List<MyXmlSerializableType> MyList { get; set; }

System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
{
return null;
}

void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
{
// Read MyList from reader, but how?
// Something like this?
// MyList = (List<MyXmlSerializableType>)
reader.ReadObject(typeof(List<MyXmlSerializableType>));
}

void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
{
// Write MyList to writer, but how?
// Something like this?
// writer.WriteObject(MyList)

}
}

最佳答案

对于编写器,您可以只为 MySerializableType 创建一个 XmlSerializer,然后通过它序列化列表给您的编写器。

void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
{
// write xml decl and root elts here
var s = new XmlSerializer(typeof(MySerializableType));
s.Serialize(writer, MyList);
// continue writing other elts to writer here
}

读者也有类似的方法。 编辑:要只读取列表,并在列表完成后停止读取,但在流结束之前,您需要使用 ReadSubTree (信用 Marc Gravell)。

关于c# - 如何在自定义 XML 序列化方法中使用默认 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898187/

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