Laden...

XmlSerializer "überschreiben"

Erstellt von chilic vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.036 Views
C
chilic Themenstarter:in
2.121 Beiträge seit 2010
vor 13 Jahren
XmlSerializer "überschreiben"

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.

T
327 Beiträge seit 2006
vor 13 Jahren

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...

6.911 Beiträge seit 2009
vor 13 Jahren

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!"

C
chilic Themenstarter:in
2.121 Beiträge seit 2010
vor 13 Jahren

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.

3.971 Beiträge seit 2006
vor 13 Jahren

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...

C
chilic Themenstarter:in
2.121 Beiträge seit 2010
vor 13 Jahren

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...

4.939 Beiträge seit 2008
vor 13 Jahren

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);
}

3.971 Beiträge seit 2006
vor 13 Jahren

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...