web-dev-qa-db-fra.com

Sérialisation XML du tableau C #

J'ai trouvé un problème avec la sérialisation XML de C #. La sortie du sérialiseur est incohérente entre Win32 normal et WinCE (mais étonnamment WinCE a la sortie du correcteur IMO). Win32 ignore simplement l'attribut Class2 XmlRoot("c2").

Quelqu'un sait-il comment obtenir la sortie de type WinCE sur Win32 (parce que je ne veux pas que les balises XML aient le nom de classe de la classe de sérialisation).

Code de test:

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 attendu (WinCE génère cela):

<?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 (semble être la mauvaise version):

<?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>
24
Fionn

Essayez [XmlArrayItem ("c2")]

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

ou [XmlType ("c2")]

[XmlType("c2")]
public class Class2
{
    [XmlAttribute("name")]
    public string Name;
}
40
Ray Lu