c# - 如何使用具有层次结构的类结构的 C# 反序列化

标签 c# class serialization hierarchy

我正在尝试将一些 xml 文件反序列化为一些已简化为以下的类:

[XmlRoot("person")]
[Serializable]
public class Person
{
    [XmlElement]
    public Toy Toy { get; set; }
}

[Serializable]
public class ActionMan : Toy
{
    [XmlElement("guns")]
    public string Guns;
}

[Serializable]

public class Doll : Toy
{
    [XmlElement("name")]
    public  String Name;
}

[XmlInclude(typeof(Doll))]
[XmlInclude(typeof(ActionMan))]
public class Toy
{
}

[TestFixture]
public class ToyTest
{
    [Test]
    public void testHierarchy()
    {
        String filePath = @"test\brother.xml";
        String sisfilePath = @"test\sister.xml";
        var serializer = new XmlSerializer(typeof(Person));
        Person brother = (Person)serializer.Deserialize(new FileStream(filePath, FileMode.Open));
        Person sister = (Person)serializer.Deserialize(new FileStream(sisfilePath, FileMode.Open));

        Assert.IsNotNull(brother);
        Assert.IsNotNull(sister);
        Assert.IsAssignableFrom(typeof(ActionMan),brother.Toy);
        Assert.IsAssignableFrom(typeof(Doll),sister.Toy);
    }
}

我想使用 c# 序列化(我知道我可以使用我自己的反序列化器),我想我可能只是缺少一个我不知道的特定标签(而且我确定我有多余的标签)。

这是一个 xml 文件:

<person>
  <doll>
    <name>Jill</name>
  </doll>
</person>

我得到的错误是第三个断言上的“Expected: assignable from”

最佳答案

类 person 应该包含“娃娃”属性而不是“玩具”属性,我指的是名字。 XML 节点必须具有与属性名称相同的名称 - 大小写很重要。

关于c# - 如何使用具有层次结构的类结构的 C# 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006891/

相关文章:

c# - 在控制生成的 XML 元素的同时对派生类使用 C# xmlserializer

c# - 使用 SSH.NET 库通过 SSH 连接到 MySQL

php - 在不使用反射的情况下获取类名减去命名空间

c# - 使用 'Paste XML as Classes' 反序列化 Web API 剩余响应

c++ - 什么时候应该让一个类不可复制?

JavaScript - 用 "no-js"类替换 "js"类不起作用?

android - 使用 GSON 序列化 SparseArray<T>

java - ObjectInputStream 通过 DeflaterInputStream 抛出 StreamCorruptedException

c# - 使用默认网络浏览器打开 html 文件

c# - 错误 101 (net::ERR_CONNECTION_RESET):连接已重置