Ich versuche, ein sehr einfaches Stück Serialisierung mit XmlSerializer zu tun:Setter nicht aufgerufen, wenn Deserialisieren Sammlung
public struct XmlPerson
{
[XmlAttribute] public string Id { get; set; }
[XmlAttribute] public string Name { get; set; }
}
public class GroupOfPeople
{
private Dictionary<string, string> _namesById = new Dictionary<string, string>();
//pseudo property for serialising dictionary to/from XML
public List<XmlPerson> _XmlPeople
{
get
{
var people = new List<XmlPerson>();
foreach (KeyValuePair<string, string> pair in _namesById)
people.Add(new XmlPerson() { Id = pair.Key, Name = pair.Value });
return people;
}
set
{
_namesById.Clear();
foreach (var person in value)
_namesById.Add(person.Id, person.Name);
}
}
}
Speichern dieser Klasse funktioniert gut, und ich bekomme:
<?xml version="1.0" encoding="utf-8"?>
<GroupOfPeople xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<_XmlPeople>
<XmlPerson Id="person1" Name="Fred" />
<XmlPerson Id="person2" Name="Bill" />
<XmlPerson Id="person3" Name="Andy" />
<XmlPerson Id="person4" Name="Nagesh" />
</_XmlPeople>
</GroupOfPeople>
Wenn jedoch Ich lese die Datei erneut ein, mein _XmlPeople-Eigenschaftensetter wird nie aufgerufen, und daher ist das Wörterbuch leer. Alle anderen Eigenschaften dieses Objekts werden deserialisiert.
Fehle ich etwas offensichtlich? Ich habe verschiedene Sammeltypen ausprobiert, aber keiner von ihnen deserialisiert.
EDIT: Lesen Sie den Code ein:
try
{
using (var stream = new StreamReader(itemPath))
{
var xml = new XmlSerializer(typeof(GroupOfPeople));
GroupOfPeople item = (GroupOfPeople)xml.Deserialize(stream);
}
}
//snip error stuff
Wie liest du? – Tigran
Habe mit Code bearbeitet. – GazTheDestroyer
Der Setter wird nie aufgerufen. Ich habe einen Haltepunkt darauf gesetzt. – GazTheDestroyer