문제

C#의 XML 직렬화에 문제가 있음을 발견했습니다. 시리얼 라이저의 출력은 일반 Win32와 Wince 사이에 일치하지 않습니다 (그러나 놀랍게도 Wince는 IMO orecter 출력이 있습니다). Win32는 단순히 Class2를 무시합니다 XmlRoot("c2") 기인하다.

Win32에서 Wince를 출력하는 방법을 알고 있습니까 (XML 태그가 직렬화 클래스의 클래스 이름을 갖기를 원하지 않기 때문에).

테스트 코드 :

using System;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleTest
{
    [Serializable]
    [XmlRoot("c1")]
    public class Class1
    {
        [XmlArray("items")]
        public Class2[] Items;
    }

    [Serializable]
    [XmlRoot("c2")]
    public class Class2
    {
        [XmlAttribute("name")]
        public string Name;
    }

    class SerTest
    {
        public void Execute()
        {
            XmlSerializer ser = new XmlSerializer(typeof (Class1));

            Class1 test = new Class1 {Items = new [] {new Class2 {Name = "Some Name"}, new Class2 {Name = "Another Name"}}};

            using (TextWriter writer = new StreamWriter("test.xml"))
            {
                ser.Serialize(writer, test);
            }
        }
    }
}

예상 XML (Wince가 생성) :

<?xml version="1.0" encoding="utf-8"?>
<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <items>
    <c2 name="Some Name" />
    <c2 name="Another Name" />
  </items>
</c1>

Win32 XML (잘못된 버전 인 것 같습니다) :

<?xml version="1.0" encoding="utf-8"?>
<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <items>
    <Class2 name="Some Name" />
    <Class2 name="Another Name" />
  </items>
</c1>
도움이 되었습니까?

해결책

xmlarrayitem ( "C2")]을 시도하십시오.

[XmlRoot("c1")]
public class Class1
{
    [XmlArray("items")]
    [XmlArrayItem("c2")] 
    public Class2[] Items;
}

또는 [xmltype ( "C2")

[XmlType("c2")]
public class Class2
{
    [XmlAttribute("name")]
    public string Name;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top