0

私はいたるところを見てきましたが、単一の回答が有効ではないか、質問がわずかにずれているため、必要な回答が得られません。私が探したすべての検索を考えると、.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

4

0 に答える 0