C#のXmlSerializerでシリアル化するクラスがあります。XmlRoot属性でマークされているので、この属性を派生クラスに継承したいと思います。
ドキュメントを見ると、XmlRootがAttributeUsageAttributeを使用してInheritをfalseに設定するとは書かれていません(Inheritはデフォルトでtrueに設定されています)が、XmlRoot属性なしで継承されたクラスを逆シリアル化しようとするとエラーが発生します( "<rootNode xmlns ='' >は予期されていませんでした。」)。
これは現在機能します:
[Serializable()]
[XmlRoot("rootNode")]
public class BaseClass
{
[XmlAttribute("attributeA")]
public int A { get; set; }
}
[Serializable()]
[XmlRoot("rootNode")]
public class InheritedClass : BaseClass
{
[XmlElement("elementB")]
public int B { get; set; }
}
これは機能しませんが、私が欲しいものです:
[Serializable()]
[XmlRoot("rootNode")]
public class BaseClass
{
[XmlAttribute("attributeA")]
public int A { get; set; }
}
[Serializable()]
public class InheritedClass : BaseClass
{
[XmlElement("elementB")]
public int B { get; set; }
}
私が逆シリアル化しようとするかもしれないXMLはInheritedClass
次のようになります:
<rootNode attributeA="abc">
<elementB>123</elementB>
</rootNode>