0

我到处看了看,没有一个回答是有效的,或者问题只是稍微偏离了一点,以至于没有让我得到我需要的答案。鉴于我所寻找的所有搜索,.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>

为什么!

我们如何解决这个问题?

这一点很重要,因为如果没有自定义处理,我将被迫双步执行,并将序列化的 xml 处理为 XmlDocument 以修复此故障。是的,这一定是个小故障。除了根元素,我可以解决其他所有问题。

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

感谢 Jaeden "Sifo Dyas" al'Raec Ruiner

4

0 回答 0