0
私が構築し、そのような.NETでこのよう/シリアライズXMLをデシリアライズするためにクラス構造を構成する方法を考え出すのトラブルを抱えている:シリアル化XML
<OuterElem>
<InnerElem>
<C1>...</C1>
</InnerElem>
</OuterElem>
いくつかの注意:
- C1は複合型です。
- C2、C3などの異なる複合タイプもあります。
- 複数のCx要素が同時に存在することがあります。
- OuterElemとInnerElemは、Cx要素とは異なる名前空間に由来します。
- 実行時(実際にコンパイル時)に、可能なCx要素の完全なセットは現在のユースケースでよく知られていますが、ラッピング要素は汎用ソリューションの一部ですので、Cx要素に依存しないことが望ましいです。
これは私がこれまで持っているものです。
[XmlRoot(Namespace = "urn:outer-ns")]
public class OuterElem
{
public object[] InnerElem { get; set; }
}
[XmlRoot(ElementName = "C1", Namespace = "urn:ns1")]
public class C1 { }
[XmlRoot(ElementName = "C2", Namespace = "urn:ns1")]
public class C2 { }
しかし、これは私が欲しいもの与えるものではありません。
var xs = new XmlSerializer (typeof(OuterElem),
new [] {typeof(C1), typeof(C2)});
var s = new StringWriter();
xs.Serialize (s, outerElemInstance);
利回りXMLのように:でシリアル化
<?xml version="1.0" encoding="utf-16"?>
<OuterElem>
<Body>
<anyType xmlns:q1="urn:ns1" xsi:type="q1:C1">
どのように私はそれがこのanyType
するのではなく、要素名C1を使用することができますか?このユースケースについては
のおかげでこれらの属性を追加することで、これは私がやりたいようです。最終的に、XmlAttributeOverridesクラスが何であるかを知ることができました。 –