Ich habe eine einfache Klasse, die von Collection erbt und fügt ein paar Eigenschaften hinzu. Ich muss diese Klasse in XML serialisieren, aber der XMLSerializer ignoriert meine zusätzlichen Eigenschaften.XmlSerialize eine benutzerdefinierte Sammlung mit einem Attribut
Ich nehme an, dies liegt an der speziellen Behandlung, die XMLSerializer ICollection und IEnumerable Objekte gibt. Was ist der beste Weg?
Hier ist ein Beispielcode:
using System.Collections.ObjectModel;
using System.IO;
using System.Xml.Serialization;
namespace SerialiseCollection
{
class Program
{
static void Main(string[] args)
{
var c = new MyCollection();
c.Add("Hello");
c.Add("Goodbye");
var serializer = new XmlSerializer(typeof(MyCollection));
using (var writer = new StreamWriter("test.xml"))
serializer.Serialize(writer, c);
}
}
[XmlRoot("MyCollection")]
public class MyCollection : Collection<string>
{
[XmlAttribute()]
public string MyAttribute { get; set; }
public MyCollection()
{
this.MyAttribute = "SerializeThis";
}
}
}
Das gibt das folgende XML (beachten Sie MyAttribute ist im MyCollection Element fehlt):
<?xml version="1.0" encoding="utf-8"?>
<MyCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Hello</string>
<string>Goodbye</string>
</MyCollection>
Was ich wollen
<MyCollection MyAttribute="SerializeThis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Hello</string>
<string>Goodbye</string>
</MyCollection>
ist
Irgendwelche Ideen? Je einfacher, desto besser. Vielen Dank.
Siehe meine Lösung, könnten Sie es interessant finden. – toddmo