在反序列化期间,如何忽略属性?在我的情况下,我不希望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>
答案 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);
}
您可以实现不同的构造函数来获取流或您拥有的任何内容。它不一定是文件路径。