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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-31 18:30:10871ブラウズ

How to Suppress the Root Array Element in XML Serialization?

XML シリアル化: ルート配列要素の抑制

質問:

XML をシリアル化できますかコレクションのルート要素を無効にしますか?属性を持つ次のクラスを考えてみましょう。

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

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

このクラスは、ルート を持つ XML を生成します。要素:

<SHOPITEM xmlns:xsi="" xmlns:xsd="">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>

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

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

出力から省略されますか?さらに、xsi および xsd 名前空間をルート要素から削除するにはどうすればよいですか?

// ...

ShopItem item = new ShopItem() { ProductName = "test", ... };

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

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

回答:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
要素で、[XmlArrayItem] 属性をコレクション プロパティの [XmlElement] に置き換えます:xsi および xsd 名前空間を削除するには、空の名前空間で XmlSerializerNamespaces インスタンスを作成し、シリアル化中にそれを使用します:結果の XML は目的の形式になります:

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

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