ホームページ > バックエンド開発 > C++ > .NET シリアル化中に XML コレクションからルート要素を削除するにはどうすればよいですか?

.NET シリアル化中に XML コレクションからルート要素を削除するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-31 17:10:11
オリジナル
692 人が閲覧しました

How to Remove the Root Element from an XML Collection during .NET Serialization?

XML シリアル化 - コレクション内のルート要素のレンダリングを無効にする

質問:

.NET での 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="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
ログイン後にコピー

ただし、目標は を削除することです。完全に要素。さらに、xsi および xsd 名前空間はルート要素から省略する必要があります。これは可能ですか?

答え:

コレクションのルート要素のレンダリングを無効にするには、コード内の [XmlArrayItem] 属性を [XmlElement] に置き換えます。 xsi および xsd 名前空間を削除するには、空の名前空間で XmlSerializerNamespaces インスタンスを作成し、シリアル化中にそれを渡します。

更新された例を次に示します:

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

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

// ...

// Create a serializer namespaces object
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

// Create a serializer and pass in the namespaces object
XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
ログイン後にコピー

これにより、次の出力が生成されます:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
ログイン後にコピー

以上が.NET シリアル化中に XML コレクションからルート要素を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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