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

时间:2017-02-16 02:20:08

标签: c# xml-deserialization

在反序列化期间,如何忽略属性?在我的情况下,我不希望FullName属性被初始化。我不是在寻找[XMLIgnore]解决方案 - 认为这是我无法改变课程的场景。

这是我的班级:

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>

1 个答案:

答案 0 :(得分:2)

您可以在反序列化过程中使用自定义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);
}

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