0
を使用して基本クラスから継承するクラスのノード名のXMLTypeの書き込みにどのように私はC#のオブジェクトのグループから次のXMLを生成したいと思いますこのまたはそのノードを含むことができ、私はXMLスキーマを制御できません。適切なXMLを記述するC#オブジェクトを作成する必要がありますが、物語コレクションに問題があります。XmlSerializerを
[XmlRoot("MyRoot", Namespace = XmlNamespace)]
public class MyRoot
{
public const string XmlNamespace = "http://sample.com";
public List<MyThing> Things { get; set; }
}
[XmlInclude(typeof(This))]
[XmlInclude(typeof(That))]
public class MyThing
{
}
[XmlRoot(Namespace = MyRoot.XmlNamespace)]
[XmlType("This")]
public class This : MyThing
{
public string ThisRef { get; set; }
}
[XmlRoot(Namespace = MyRoot.XmlNamespace)]
[XmlType("That")]
public class That : MyThing
{
public string ThatRef { get; set; }
}
[TestClass]
public class so
{
[TestMethod]
public void SerializeTest()
{
// Create object to serialize
var data = new MyRoot { Things = new List<MyThing>() };
data.Things.Add(new This { ThisRef = "this ref" });
data.Things.Add(new That { ThatRef = "that ref" });
// Create XML namespace
var xmlNamespaces = new XmlSerializerNamespaces();
xmlNamespaces.Add(string.Empty, MyRoot.XmlNamespace);
// Write XML
var serializer = new XmlSerializer(typeof(MyRoot));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, data, xmlNamespaces);
var xml = writer.ToString();
Console.WriteLine(xml);
}
}
}
は、以下のXML生成します:ここで
は、私がこれまで持っているものだ、私はXmlSerializerをするを取得できますか- :だから
<?xml version="1.0" encoding="utf-16"?> <MyRoot xmlns="http://sample.com"> <Things> <MyThing d3p1:type="This" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance"> <ThisRef>this ref</ThisRef> </MyThing> <MyThing d3p1:type="That" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance"> <ThatRef>that ref</ThatRef> </MyThing> </Things> </MyRoot>
を、私は2つの質問があります書き込みこれはとそのいいえdesの代わりにMyThingノード?
- にはどうすればノードが(現在MyThingノードとして書かれた)ことこのとに追加の名前空間情報を追加することからのXmlSerializerを停止することができますか?
できません。代わりに、シリアライザは値 "this"と "that"を持つ 'type'属性を作成します。独自のシリアライザを作成する必要があります。 – jdweng
@jdwengあなたのコメントをありがとうが、私は解決策を見つけることができた。 –