Hallo
Ich habe Objekte, die ich mit dem XmlSerializer in XML wandle und zurück.
Die Objekte enthalten wiederum Unterobjekte. Teilweise sind das vordefinierte Strukturen wie Point und Size, die mehrere Felder enthalten.
Die hätte ich jetzt gerne als z.B. <point x="5" y="5" /> serialisiert, statt <point><x>5</x><y>5</y></point>
Kann ich das erreichen?
Ich hätt auch kein Probem damit wenn ich dem Serializer sagen könnte, er soll für die Serialisierung des betreffenden Objekts eine von mir geschriebene Methode aufrufen die das Serialisieren übernimmt.
Aber ich find diesbezüglich überhaupt nichts.
Versuch's doch mal hiermit: XmlAttributeAttribute
Edit: Hab überlesen, dass das was du serialisieren willst nicht alles selbst definierte Typen sind... das Attribut aus dem Link trifft dafür nicht zu...
Hallo,
wenn du vordefinierte Strukturen in einer eigenen Klasse verwendet werden so kann auch das XmlAttribute verwendet werden.
Ich hätt auch kein Probem damit wenn ich dem Serializer sagen könnte, er soll für die Serialisierung des betreffenden Objekts eine von mir geschriebene Methode aufrufen die das Serialisieren übernimmt.
Guck dir mal IXmlSerializable an.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Ok ich hab damit mal ein bisschen experimentiert. Damit kriegt man ja alles hin was man haben will. Aber vielleicht gibts ja doch noch was anderes.
Mein aktuelles Problem ist eine List<Point> wobei ich die Koordinaten als Attribute serialisiert haben möchte, statt als Unterelemente. Krieg ich sowas auch ohne selbst serialisieren hin?
Das doofe dabei ist dass Point vordefiniert ist und ich hier kein [XmlAttribute()] (oder so ähnlich) davon setzen kann.
Schreib dir ne eigene Struktur und spendiere ihr entsprechende Konvertierungsoperatoren.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Das war auch einer meiner Gedanken. Aber dann ist es halt nicht mehr das was es sein soll und was in alle möglichen Funktionen rein passt...
Doch gerade dafür sind die Konvertierungsoperatoren ja gedacht. Schau dir mal die Schlüsselwörter 'implicit' und 'explicit' in der MSDN-Hilfe an.
Bei dir z.B.:
public static implicit operator Point(MyPoint p)
{
return new Point(p.X, p.Y);
}
Nun kann überall MyPoint verwendet werden, wo eigentlich ein Point erwartet wird.
Und umgekehrt kannst du ebenfalls automatisch von Point in MyPoint umwandeln lassen:
public static implicit operator MyPoint(Point p)
{
return new MyPoint(p.X, p.Y);
}
Hallo chilic,
wenn du es chic haben willst, musst du auf IXmlSerializable umsteigen und die Klasse, die Point verwendet eben selbst serialisieren.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...