ホームページ >バックエンド開発 >C++ >.NET で XML をシリアル化するときに名前空間宣言をカスタマイズするにはどうすればよいですか?

.NET で XML をシリアル化するときに名前空間宣言をカスタマイズするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-01 12:08:12476ブラウズ

How to Customize Namespace Declarations When Serializing XML in .NET?

.NET でシリアル化された XML の名前空間宣言をカスタマイズする

xsi や xsd などの過剰な XML 名前空間宣言を生成せずにオブジェクトをシリアル化しようとすると、問題が発生します。デフォルトでは、シリアル化プロセスはこれらの名前空間を結果の XML ドキュメントに挿入します。

問題を示す次のコード スニペットを考えてみましょう:

StringBuilder builder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings))
{
    XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
    s.Serialize(xmlWriter, objectToSerialize);
}

結果の XML ドキュメントには名前空間宣言が含まれます:

<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" 
    xmlns="urn:something">
 ...
</message>

これらの不必要な名前空間宣言を排除するには、カスタマイズされた名前空間を使用することが不可欠ですオブジェクト:

...
XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
s.Serialize(xmlWriter, objectToSerialize, ns);

XmlSerializerNamespaces クラスを利用し、空の文字列をキーと値として追加することにより、デフォルトの名前空間宣言をオーバーライドして、目的の出力を生成できます:

<message>
 ...
</message>

以上が.NET で XML をシリアル化するときに名前空間宣言をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。