>백엔드 개발 >C++ >배열에 대한 XML 직렬화에서 루트 요소 렌더링을 비활성화하는 방법은 무엇입니까?

배열에 대한 XML 직렬화에서 루트 요소 렌더링을 비활성화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 16:34:41777검색

How to Disable Root Element Rendering in XML Serialization for Arrays?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.