C# Xml 反序列化,忽略 XML 中的数据

C# Xml Deserialize, ignore data in XML

在反序列化过程中,如何忽略 属性?就我而言,我根本不希望 FullName 属性 被初始化。我不是在寻找 [XMLIgnore] 解决方案 - 将其视为我无权更改 class 的场景。

这是我的 class:

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
}

这是我的初始化方式:

Person p1 = new Person() { Id = 1, FullName = "P1" };
Person p2 = new Person() { Id = 2, FullName = "P2" };
List<Person> persons = new List<Person> { p, q }; //this object is xml serialized. 

这是我的 XML:(我通过 XML 序列化得到它)

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <Id>1</Id>
    <FullName>P1</FullName>
  </Person>
  <Person>
    <Id>2</Id>
    <FullName>P2</FullName>
  </Person>
</ArrayOfPerson>

您可以在反序列化过程中使用自定义 XmlReader,它将简单地跳过 FullName 元素。像这样:

public class MyXmlReader : XmlTextReader
{
    public MyXmlReader(string filePath) : base(filePath)
    {
    }

    public override bool Read()
    {
        if (base.Read())
        {
            if (Name == "FullName")
                return base.Read();

            return true;
        }

        return false;
    }
}

那就这样用吧

var serializer = new XmlSerializer(typeof(List<Person>));

using (var reader = new MyXmlReader("XMLFile.xml"))
{
    var person = (List<Person>)serializer.Deserialize(reader);
}

您可以实现不同的构造函数来获取流或您拥有的任何内容。它不一定是文件路径。