XmlAttributeOverrides を使用して、クラスがシリアル化された後に xml に表示されるクラス プロパティを制御しようとしています。「ルート」クラスにあるプロパティでは機能しますが、ネストされたプロパティでは機能しません。これは、私が達成しようとしていることを説明するための簡単な例です。
私のクラス階層は次のとおりです。
public class Main
{
public string Name { get; set; }
public Location Address { get; set; }
}
public class Location
{
public string StreetAddress { get; set; }
public Contact ContactInfo{ get; set; }
}
public class Contact
{
public string PhoneNumber { get; set; }
public string EmailAddr { get; set; }
}
Main() をシリアル化すると、次のようになります。
<Main>
<Name></Name>
<Address>
<StreetAddress></StreetAddress>
<ContactInfo>
<PhoneNumber></PhoneNumber>
<EmailAddr></EmailAddr>
</ContactInfo>
</Address>
</Main>
私ができることは、これを使用して名前またはアドレスのいずれかが表示されないようにすることです。
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attribs = new XmlAttributes();
attribs.XmlIgnore = true;
attribs.XmlElements.Add(new XmlElementAttribute("Address"));
overrides.Add(typeof(Main), "Address", attribs);
xs = new XmlSerializer(typeof(Main), overrides);
私ができるようにする必要があるのは、Main.Address.ContactInfo が時々シリアル化されないようにすることです(空の場合)。次のことを試しましたが、うまくいきませんでした。
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attribs = new XmlAttributes();
attribs.XmlIgnore = true;
attribs.XmlElements.Add(new XmlElementAttribute("ContactInfo "));
overrides.Add(typeof(Contact), "ContactInfo ", attribs);
xs = new XmlSerializer(typeof(Contact), overrides);
と...
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attribs = new XmlAttributes();
attribs.XmlIgnore = true;
attribs.XmlElements.Add(new XmlElementAttribute("ContactInfo "));
overrides.Add(typeof(Main.Address.ContactInfo), "ContactInfo ", attribs);
xs = new XmlSerializer(typeof(Main.Address.ContactInfo), overrides);
XPath ステートメントを使用して対象の属性名を指定するなど、実際にはもっと多くのことを試しましたが、失敗した試みでこのページを埋めたくありませんでした。私が求めていることは、この方法でも可能ですか?