XML 직렬화: 루트 배열 요소 억제
질문:
XML 직렬화 가능 컬렉션의 루트 요소를 비활성화하시겠습니까? 속성이 있는 다음 클래스를 고려해 보세요.
[XmlRoot(ElementName="SHOPITEM", Namespace="")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlArrayItem("VARIANT")] public List<ShopItem> Variants { get; set; } }
이 클래스는 루트
<SHOPITEM xmlns:xsi="" xmlns:xsd=""> <PRODUCTNAME>test</PRODUCTNAME> <Variants> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </Variants> </SHOPITEM>
<변형> 출력에서 생략됩니까? 또한 루트 요소에서 xsi 및 xsd 네임스페이스를 어떻게 제거할 수 있습니까?
답변:
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } }
xsi 및 xsd 네임스페이스를 제거하려면 빈 네임스페이스로 XmlSerializerNamespaces 인스턴스를 생성하고 직렬화 중에 사용합니다.
// ... ShopItem item = new ShopItem() { ProductName = "test", ... }; // This removes the xsi/xsd namespaces from serialization XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns); // Pass XmlSerializerNamespaces here
결과 XML은 원하는 형식을 갖습니다.
<?xml version="1.0" encoding="ibm850"?> <SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
위 내용은 XML 직렬화에서 루트 배열 요소를 억제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!