XmlSerialisierung von object

Hallo zusammen,

ich habe eine Klasse, die ich gerne als Xml-File serialisieren möchte. Sie hat eine öffentliche Property namens Value

public object Value
{
 get
 {
 return \_value;
 }
 set
 {
 \_value = value;
 }
}

Das funktioniert auch hervorragend wenn das object ein einfacher String oder ein ValueType ist. Wenn das object allerdings ein Array ist geht es nicht.

Es wird folgende Exception geworfen:

[System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive]
The type Sytem.Int32[] may not be used in this context.

Ich kann zwar über XmlElementAttribute bzw. XmlArrayAttribute die Property beeinflussen, aber sie soll universell verwendbar sein und erst zur Laufzeit wissen, ob sie ein einfaches Element oder ein Array ist.

Hat irgendjemand eine Idee.

Vielen Dank schon mal im Voraus !!!

Gruß,
Daniel

Hallo zusammen,

[…]

Hat irgendjemand eine Idee.

Vielen Dank schon mal im Voraus !!!

Gruß,
Daniel

Hi!

Der XMLSerializer kann nicht alle Typen serialisieren und muss immer vorher wissen, was er serialisieren muss (darum muss man beim c’tor immer den Typ des zu serialisierenden Objektes angeben).
Wenn eine Eigenschaft vom Typ „object“ ist, dann kann der Serializer nicht sagen, was zur Laufzeit konkret zu serialisieren ist.
Das kann das von Dir geschilderte Verhalten erklären.

XMLSerializer ist aber ohnehin so ein Kandidat, der in vielen Situationen Probleme macht. Beispielsweise braucht jeder zu serialisierenden Typ einen parameterlosen public-Constructor, was bei etlichen Klassen nicht gegeben ist.

Also entweder das eine Property (lass mich raten, es heisst „Tag“? :wink:) von der Serialisierung ausnehmen oder einen BinarySerialiszer verwenden.

Martin

P.S.: Gerade habe ich mit einem Testbeispiel rumprobiert und festgestellt, dass die XML-Serialisierung der Klasse doch geht, wenn man noch ein zusätzliches Property einfügt, das den gleichen Typ wie der jeweilige Wert des Tag-Property hat (also in Deinem Bsp. auch ein int[]).
Bringt für den praktischen Einsatz zwar nichts, aber sonderbar ist es allemal…
Wer mir das erklären kann bekommt eine aufblasbare Waschmaschine.