.NET4.0で.NETのDataContractSerializerを使用してXMLに変換する一連のクラスがあります。シリアル化は正常に機能しており、XMLを解析して、後で問題なく.NETオブジェクトを再作成できます。
ただし、ほとんどのDataMemberは必須ではありません。[DataMember(IsRequired = false)]。これは、XMLの逆シリアル化に最適です。この場合、ドキュメントからXMLノードを見逃す可能性がありますが、既存のオブジェクトをXMLにシリアル化する場合、DataContractSerializerは、null値を持つプロパティを属性を持つノードとして書き出すことを要求します。
[DataContract(Name = "response", Namespace = "http://domain.com/name")]
public class MyResponseClass
{
[DataMember(Name = "count", IsRequired = true, Order = 0)]
public int Count { get; set; }
[DataMember(Name = "info", IsRequired = false, Order = 1)]
public InfoClass Info { get; set; }
[DataMember(Name = "metadata", IsRequired = false, Order = 2)]
public MetadataList Metadatas { get; set; }
}
からシリアル化できます
<response xmlns="http://domain.com/name">
<count>4</count>
</response>
ただし、オブジェクトをシリアル化すると、次のようになります。
<response xmlns="http://domain.com/name" xmlns:i="http://www.w3.org/2001/XmlSchema-instance">
<count>4</count>
<info i:nil="true" />
<metadata i:nil="true" />
</response>
データがnull値の場合に、代わりにノードを書き込まないようにDataContractSerializerを取得する方法はありますか?