gpt4 book ai didi

c# - 如何在使用 IXmlSerializable 的类中序列化可序列化数据?

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:17 25 4
gpt4 key购买 nike

我有一个实现 IXmlSerializable 的类,如下所示:

public class SomeClass : IXmlSerializable
{
public SomeSerializableClass ClassA { get; set; }

public SomeNonSerializableClass ClassB { get; set; }

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

do
{
if (reader.Name == "SomeNonSerializableClass")
{
// Perform custom serialization
}
else if (reader.Name == "SomeSerializableClass")
{
// I just want to use the SomeSerializableClass's
// already implemented serialization process here.
}
}
while (reader.Name != "RootElement");

reader.ReadEndElement();
}
}

让我们看看这个例子的 ReadXml 实现。我有两个类,一个名为 SomeNonSerializableClass,这就是 SomeClass 类实现了 IXmlSerializable 的原因。然后我还有 SomeSerializableClass,它可以在本地序列化,例如使用 XmlSerializer

我正在使用 XmlSerializer 序列化 SomeClass,我可以手动序列化 SomeSerializableClass,但如果它已经可以序列化,我为什么还要使用.NET 序列化类?那么我怎样才能将它序列化并将其传递给读取器/写入器呢?

最佳答案

您可以为该类型使用 XmlSerializer。像这样的东西:

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

do
{
if (reader.Name == "ClassB")
{
reader.ReadStartElement();

// manually deserialize SomeNonSerializableClass here

reader.ReadEndElement();
}
else if (reader.Name == "ClassA")
{
reader.ReadStartElement();
var serializer = new XmlSerializer(typeof(SomeSerializableClass));
ClassA = (SomeSerializableClass)serializer.Deserialize(reader);
reader.ReadEndElement();
}
}
while (reader.Name != "SomeClass");

reader.ReadEndElement();
}

public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("ClassB");
// manually serialize SomeNonSerializableClass here
writer.WriteEndElement();

writer.WriteStartElement("ClassA");
var serializer = new XmlSerializer(typeof(SomeSerializableClass));
serializer.Serialize(writer, ClassA);
writer.WriteEndElement();
}

关于c# - 如何在使用 IXmlSerializable 的类中序列化可序列化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114124/

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