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 correctrice d'IMO). Win32 ignore simplement l'attribut Class2 XmlRoot("c2")
.Sérialisation XML C# Array
Est-ce que quelqu'un sait comment obtenir la sortie WinCE like sur Win32 (parce que je ne veux pas que les balises XML aient le nom de classe de la classe de sérialisation).
Code d'essai:
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 attendue (Expected WinCE génère ceci):
<?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>
XML Win32 (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>