XML 직렬화: 배열의 루트 요소 렌더링 비활성화
직렬화는 소프트웨어 개발에서 중요한 프로세스로, 객체를 XML과 같은 영구 형식. 그러나 컬렉션에 대한 루트 요소 렌더링을 비활성화하는 등 직렬화 동작을 수정하고 싶을 수도 있습니다.
루트 요소 렌더링 비활성화
고려하세요. 제품 이름과 변형 목록이 모두 포함된 상점 항목을 나타내는 클래스입니다. 기본적으로 [XmlRoot] 및 [XmlArrayItem]과 같은 XML 주석을 사용한 직렬화는 다음 XML을 생성합니다.
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <Variants> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </Variants> </SHOPITEM>
그러나 Variants 요소를 완전히 제거할 수도 있습니다. 이를 달성하려면 코드에서 [XmlArrayItem] 특성을 [XmlElement]로 바꾸십시오. 이는 변형을 SHOPITEM 루트 요소의 직접 하위 요소로 렌더링하도록 직렬 변환기에 지시합니다.
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
네임스페이스 제거
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; } } // ... ShopItem item = new ShopItem() { ProductName = "test", Variants = new List<ShopItem>() { new ShopItem{ ProductName = "hi 1" }, new ShopItem{ ProductName = "hi 2" } } }; // This will remove the xsi/xsd namespaces from serialization XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
출력
Variant 요소와 네임스페이스가 없는 결과 XML:
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
위 내용은 배열에 대한 XML 직렬화에서 루트 요소 렌더링을 비활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!