我正在寻找一种使用C#的方式,可以将一个类序列化为XML并添加一个名称空间,但是定义该名称空间将使用的前缀。
最终,我试图生成以下XML:
<myNamespace:Node xmlns:myNamespace="..."> <childNode>something in here</childNode> </myNamespace:Node>
我知道同时使用DataContractSerializer和都XmlSerializer可以添加名称空间,但是它们似乎在内部生成前缀,而我无法控制这些前缀。我可以使用这两个序列化器中的任何一个来控制它吗(我可以使用它们中的任何一个)?
DataContractSerializer
XmlSerializer
如果我无法控制名称空间的生成,则需要编写自己的XML序列化程序,如果是,编写它的最佳方法是什么?
要控制名称空间别名,请使用XmlSerializerNamespaces。
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。
XmlAttributeOverrides