私はいたるところを見てきましたが、単一の回答が有効ではないか、質問がわずかにずれているため、必要な回答が得られません。私が探したすべての検索を考えると、.Net の xml シリアライゼーションの実装に 1 つの大きな欠陥があるようです。
デフォルト:
[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