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