IXmlSerializable和根元素前缀

时间:2015-07-30 21:56:36

标签: xmlserializer prefix ixmlserializable

我到处寻找并且没有一个回复是有效的,或者问题只是略微偏离到没有得到我需要的答案。鉴于我所寻找的所有搜索,.Net的xml序列化实现似乎存在一个巨大的缺陷。

默认值:

[XmlRoot("root", Namespace="http://myclass.org/")]
public class MyClass 
{
}

void Main() {
  XmlSerializer ser = new XmlSerializer(typeof(MyClass));
  XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
  xsn.Add("mc", "http://myclass.org/");
  ser.Serialize(new StreamWriter(Console.Out), new MyClass(), xsn);
}

输出:

<?xml version="1.0"?>
<mc:root xmlns:mc="http://myclass.org/">
</mc:root>

IXmlSerializable的:

[XmlRoot("root", Namespace="http://myclass.org/")]
public class MyClass : IXmlSerializable
{
   public XmlSchema GetSchema() {return null;}
   public void ReadXml(XmlReader reader) {}
   public void WriteXml(XmlWriter writer) {}
}

void Main() {
  XmlSerializer ser = new XmlSerializer(typeof(MyClass));
  XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
  xsn.Add("mc", "http://myclass.org/");
  ser.Serialize(new StreamWriter(Console.Out), new MyClass(), xsn);
}

输出:

<?xml version="1.0"?>
<root xmlns="http://myclass.org/">
</root>

WHY!

我们如何解决这个问题?

这一点很重要,因为没有自定义处理,我将被迫加倍步进,并将序列化的xml处理成XmlDocument来修复这个故障。是的,这是一个小故障。除了根元素之外,我可以解决其他问题。

我不是唯一需要知道如何做到这一点的人。

由于 Jaeden“Sifo Dyas”al'Raec Ruiner

0 个答案:

没有答案