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

标签 c# .net serialization

我有一个实现 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/

相关文章:

ios - 无法识别NSJSONSerialization

c# - 将枚举转换为另一种类型的枚举

.net - 在连接字符串中强制使用 TCP/IP 协议(protocol)

java - 通过反射像调用静态方法一样调用实例方法

.net - System.ComponentModel.CancelEventHandler 如何工作?我不明白什么是可取消事件?

Java - 序列化一个线程

java - Jackson 根据类型反序列化到具体类

c# 应用程序无法在 XP 上运行

c# - 在另一个 Controller 中将责任从短 URL 重定向到完整 URL

c# - 如何在 WP8 map 上创建自动缩放图像