ホームページ >バックエンド開発 >C++ >配列の XML シリアル化でルート要素のレンダリングを無効にする方法

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 16:34:41774ブラウズ

How to Disable Root Element Rendering in XML Serialization for Arrays?

XML シリアル化: 配列内のルート要素のレンダリングの無効化

シリアル化はソフトウェア開発において重要なプロセスであり、オブジェクトをオブジェクトに変換できるようにします。 XML のような永続的な形式。ただし、コレクションのルート要素のレンダリングを無効にするなど、シリアル化の動作を変更したい場合があります。

ルート要素のレンダリングの無効化

を検討してください。製品名とバリエーションのリストの両方を持つショップアイテムを表すクラス。デフォルトでは、[XmlRoot] や [XmlArrayItem] などの XML アノテーションを使用したシリアル化により、次の XML が生成されます:

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>

ただし、Variants 要素を完全に削除することもできます。これを実現するには、コード内の [XmlArrayItem] 属性を [XmlElement] に置き換えます。これにより、バリアントを SHOPITEM ルート要素の直接の子としてレンダリングするようにシリアライザーに指示されます。

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>

名前空間の削除

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; }
}

// ...

ShopItem item = new ShopItem()
{
    ProductName = "test",
    Variants    = new List<ShopItem>()
    {
        new ShopItem{ ProductName = "hi 1" },
        new ShopItem{ ProductName = "hi 2" }
    }
};

// This will remove the xsi/xsd namespaces from serialization
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);

出力

Variants 要素と名前空間を含まない結果の XML:


<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>

以上が配列の XML シリアル化でルート要素のレンダリングを無効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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