Reflection: string-repräsentationen automatisch in richtigen Typ umwandeln?
-
Hi Leute,
ich speichere ein Objekt folgendermaßen als XML:
public XmlElement GetXmlRepresentation() { XmlDocument dom = new XmlDocument(); XmlElement el = dom.CreateElement("OfflineData"); foreach (PropertyInfo propertyInfo in this.GetType().GetProperties(BindingFlags.Public)) { el.SetAttribute(propertyInfo.Name, propertyInfo.GetValue(this, new object[] { }).ToString()); } return el; }
Ist es möglich den umgekehrten Weg auch ähnlich elegant zu gehen?
-
Wäre da nicht Serialisierung der richtige Weg?
-
Im Grunde implementiere ich ja genau das... Nur fehlt mir da momentan etwas Wissen
-
Warum verwendest Du dann nicht XmlSerializer oder IXmlSerializable?
-
Kann ich mit einem der beiden das entstehende XML-Layout selbst bestimmen?
-
Beim Serializer kannst Du über Attribute einiges steuern und bei IXmlSerializable kannst Du alles selbst per XmlWriter machen.
-
Bei IXmlSerializable muss ich mich ja auch um alles selbst kümmern. Also im Grunde exakt das, was ich gerade implementier.
XmlSerializer ist mir zu viel drumrum.
Aber wie macht der XmlSerializer das denn intern?
-
dEUs schrieb:
XmlSerializer ist mir zu viel drumrum.
Was ist da viel drumrum? Eine Instanz erstellen und dann serialisieren / deserialisieren?
Falls du es dennoch unbedingt selbst implemetieren willst, könntest du z.B. den Assemblynamen und den Klassennamen in deinem XmlFile zu jedem Objekt mitspeichern.
Noch ein Tipp: Wenn ein Property public ist, hat es noch lange keine Set Methode (wäre beim ersten deserialisieren sicher aufegfallen)
-
Benutz den XMLSerialiser, das selbr zu machen würde nur zu einer Lösung führen die recht begrenzt auf dein Fall ist und schwierig zu erweitern ist.
Schau dir dazu mal http://www.topxml.com/xmlserializer/ an, da steht alles dazu wie du mit dem XMLSerializier wirklich effektiv arbeitest und wie du damit auch die Struktur bestimmen kannst vom XML was raus kommt.