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 サイトの他の関連記事を参照してください。