.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>
그러나 목표는
컬렉션의 루트 요소 렌더링을 비활성화하려면 코드에서 [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 중국어 웹사이트의 기타 관련 기사를 참조하세요!