XML 직렬화에서는 컬렉션에 대한 루트 요소의 렌더링을 억제하는 것이 바람직한 경우가 많습니다. 이는 XML 구조를 단순화하고 가독성을 향상시킬 수 있습니다. 이 문서에서는 ASP.NET의 XmlSerializer를 사용하여 이를 달성하는 방법을 설명합니다.
XML 직렬화 속성이 있는 다음 ShopItem 클래스를 고려하세요.
[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]로 바꿔야 합니다.
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // Replaced [XmlArrayItem] public List<ShopItem> Variants { get; set; } }
이 수정으로 다음과 같은 단순화된 XML이 생성됩니다.
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
또한 다음과 같은 문제가 발생할 수 있습니다. 루트 요소의 xsi 및 xsd와 같은 XML 네임스페이스. 이를 제거하려면 빈 네임스페이스가 있는 XmlSerializerNamespaces 인스턴스를 생성하고 직렬화 중에 전달합니다.
예:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
이렇게 하면 XML 출력에서 원치 않는 네임스페이스가 제거됩니다.
위 내용은 XmlSerializer를 사용하여 XML 배열에서 루트 요소를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!