一尘不染

XML序列化和名称空间前缀

c#

我正在寻找一种使用C#的方式,可以将一个类序列化为XML并添加一个名称空间,但是定义该名称空间将使用的前缀。

最终,我试图生成以下XML:

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

我知道同时使用DataContractSerializer和都XmlSerializer可以添加名称空间,但是它们似乎在内部生成前缀,而我无法控制这些前缀。我可以使用这两个序列化器中的任何一个来控制它吗(我可以使用它们中的任何一个)?

如果我无法控制名称空间的生成,则需要编写自己的XML序列化程序,如果是,编写它的最佳方法是什么?


阅读 295

收藏
2020-05-19

共1个答案

一尘不染

要控制名称空间别名,请使用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

2020-05-19