逆シリアル化中にプロパティを無視するにはどうすればよいですか?私の場合、私はFullName
プロパティが全く初期化されないようにします。私は[XMLIgnore]
ソリューションを探しているわけではありません。クラスを変更するためのアクセス権がないシナリオと考えてください。ここでC#XML XML内のデータを逆シリアル化して無視する
は私のクラスです:
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>
非常に厄介な解決策(実際のコードにあまり多くのプロパティがない場合)は、新しい_temporary_クラスを作成することです。あなたが無視したいもの以外のすべてのフィールドを持つPerson2。これをシリアル化に使用します。デシリアライズしている間も元のクラスを使用できます。あなたの無視された値をnullのままにしておきます。ただし、XMLの中でクラスの名前が重要な場合は、この提案は役に立ちません。 –
これは私の最初の提案が役立たない場合に役立ちます。 [xml直列化中にプロパティを無視するが、直列化解除時には無視する](http://stackoverflow.com/a/18242538/6741868)。同じオーバーライドメソッドのもう1つの例は、[XMLにシリアライズするときにプロパティを無視する](http://stackoverflow.com/a/23121696/6741868) –
あなたの入力に感謝しますが、XMLAttributeOverridesはxmlの要素名がクラスプロパティ名とは異なります。 – Sekhar