Индивидуальная (де) сериализация члена XmlDocument - PullRequest
0 голосов
/ 17 июня 2011

У меня есть следующий класс:

[XmlRoot("testclass")]
public class TestClass
{
    [XmlElement("name")]
    public string Name { get; set; }
    [XmlElement("value")]
    public string Value { get; set; }


    [XmlElement("items")]
    public XmlDocument Items
    {
        get;
        set;
    }
}

Теперь класс инициализируется со следующими данными:

XmlDocument xml = new XmlDocument();
xml.LoadXml(@"
      <items>
        <item>
          <name>item1</name>
          <value>value1</value>
        </item>
        <item>
          <name>item2</name>
          <value>value2</value>
        </item>
       </items>
         ");

TestClass tc = new TestClass() {
    Name = "testclass",
    Value = "testclassvalue",
    Items = xml
};

Когда я сериализую (.NET XmlSerializer) этот класс, я получаю следующий вывод XML

<?xml version="1.0" encoding="utf-16"?>
<testclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <name>testclass</name>
    <value>testclassvalue</value>
    <items>
        <items>
            <item>
                <name>item1</name>
                <value>value1</value>
            </item>
            <item>
                <name>item2</name>
                <value>value2</value>
            </item>
        </items>
    </items>
</testclass>

Каков наилучший способ заставить xmlserializer выводить такой узел?

<?xml version="1.0" encoding="utf-16"?>
<testclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <name>testclass</name>
    <value>testclassvalue</value>
    <items>
        <item>
            <name>item1</name>
            <value>value1</value>
        </item>
        <item>
            <name>item2</name>
            <value>value2</value>
        </item>
    </items>
</testclass>

Кроме того, каков наилучший способ сериализации этого xml обратно в мой класс?Так что xmlelement, начинающийся с узла, будет десериализован обратно в мой член ItemsXml.

1 Ответ

0 голосов
/ 17 июня 2011

Попробуйте изменить:

[XmlElement("items")]
public XmlDocument Items { get; set; }

Просто на:

// [XmlArray("items")] <--- you can add this to get a lowercase "items"
// [XmlArrayItem("item")] <--- and this to name the actual item
public XmlDocument Items { get; set; }

Так что без [XmlElement("items")].

...