anyElementを何とかしたい
xmlスキーマからバインド用のクラスを作ってデシリアライズ の続き
よく考えたらAnyに入るべきクラスってそんなに多くない
ということで、Anyとなるエレメントの他に対象のコンテンツが格納されるプロパティを作ってみた
[System.SerializableAttribute()] [System.Xml.Serialization.XmlRootAttribute("ROOT", Namespace = "hoge", IsNullable = false)] public class ROOT{ [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] any {get;set;} [System.Xml.Serialization.XmlElement(Namespace="hoge",ElementName="BRANCH1")] public Branch1 branch1 { get; set; } [System.Xml.Serialization.XmlElement(Namespace="hoge",ElementName="BRANCH2")] public Branch2 branch2 { get; set; } }
- 対象データが無ければany/branch1/branch2ともにnullに
- 対象のタグがあればそれぞれbranch1/branch2にインスタンスが
- branch1/branch2以外のタグはまとめてanyに
という形で多少使いづらさは残るけど何とかなった。
本当は
[System.SerializableAttribute()] [System.Xml.Serialization.XmlRootAttribute("ROOT", Namespace = "hoge", IsNullable = false)] public class ROOT{ public List<Branch> any { get; set; } } [System.Xml.Serialization.XmlElement(Namespace="hoge",ElementName="BRANCH")] public class Branch{ } [System.Xml.Serialization.XmlElement(Namespace="hoge",ElementName="BRANCH1")] public class Branch1 : Branch{ } [System.Xml.Serialization.XmlElement(Namespace="hoge",ElementName="BRANCH2")] public class Branch2 : Branch{ }
みたいな形にできればよかったんだけど。