65

クラスを XML にシリアル化して名前空間を追加できる C# の方法を探していますが、その名前空間が使用するプレフィックスを定義します。

最終的に、次の XML を生成しようとしています。

<myNamespace:Node xmlns:myNamespace="...">
  <childNode>something in here</childNode>
</myNamespace:Node>

DataContractSerializerと の両方でXmlSerializer名前空間を追加できることはわかっていますが、制御できないもので内部的にプレフィックスを生成しているようです。これらのシリアライザーのいずれかで制御できますか (どちらも使用できます)?

名前空間の生成を制御できない場合、独自の XML シリアライザーを作成する必要があります。

4

3 に答える 3

120

名前空間エイリアスを制御するには、を使用しますXmlSerializerNamespaces

[XmlRoot("Node", Namespace="http://flibble")]
public class MyType {
    [XmlElement("childNode")]
    public string Value { get; set; }
}

static class Program
{
    static void Main()
    {
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("myNamespace", "http://flibble");
        XmlSerializer xser = new XmlSerializer(typeof(MyType));
        xser.Serialize(Console.Out, new MyType(), ns);
    }
}

実行時に名前空間を変更する必要がある場合は、さらにを使用できますXmlAttributeOverrides

于 2010-02-26T06:06:43.243 に答える