ホームページ > バックエンド開発 > C++ > 配列のルート要素の XML シリアル化を防ぐにはどうすればよいですか?

配列のルート要素の XML シリアル化を防ぐにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-02 18:16:39
オリジナル
627 人が閲覧しました

How to Prevent XML Serialization of an Array's Root Element?

XML シリアル化で配列のルート要素のレンダリングを無効にする

XML シリアル化では、配列のレンダリングを無効にする必要がある状況が発生する場合があります。配列のルート要素。この質問は、オブジェクトのコレクションを持つクラスがシリアル化され、不要なルート要素を含む XML が生成されるシナリオを示しています。

解決策:

レンダリングを無効にするにはルート要素の [XmlArrayItem] 属性をコレクション プロパティの [XmlElement] に置き換えることができます。これにより、コレクション要素をルート要素内で囲むのではなく、直接シリアル化するようにシリアライザーに指示します。

さらに、ルート要素から不要な xsi および xsd 名前空間を削除するには、空の XmlSerializerNamespaces のインスタンスを作成します。名前空間。この名前空間インスタンスは、不要な名前空間が含まれないようにシリアル化中に渡すことができます。

例:

次のコード スニペットは、改訂されたクラス定義とシリアル化プロセスを示しています。

[XmlRoot("SHOPITEM")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}

// ...

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", ""); // Empty namespace to remove xsi/xsd

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
ログイン後にコピー

これらの変更を適用すると、結果の XML には「Variants」ルート要素が含まれなくなり、 xsi/xsd 名前空間。これにより、配列のルート要素のレンダリングが事実上無効になります。

以上が配列のルート要素の XML シリアル化を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート