Laden...

Custom XmlSerializer ?

Erstellt von Lynix vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.491 Views
L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 17 Jahren
Custom XmlSerializer ?

Hallo zusammen !

Ich versuche gerade testweise den Code unserer Firmenanwendung von .NET 1.1 auf .NET 2.0 zu portieren, und habe dabei an einer Stelle ein Problem mit dem neuen IDictionary...

Ich hab eine Klasse CustomXmlSerializer, der von dem Standard XmlSerializer erbt. Diese Klasse macht nichts anderes, als die Serialize und Deserialize Methoden zu überschreiben.

Dabei wird lediglich überprüft, ob das zu serialisierende Objekt vom Typ IDictionary ist - falls ja werden aus dem Dictionary (üblicherweise Hashtable in .NET 1.1) zwei ArrayLists gemacht, die dann serialisiert bzw. deserialisiert werden können.

So weit so gut, klappt unter 1.1 alles wunderbar. Jetzt würde ich mit .NET 2.0 die Klasse gerne so umbauen bzw. erweitern, dass aus einem IDictionary<TKey, TValue> eine List<TKey> und eine List<TValue> gemacht wird, die dann serialisiert bzw. deserialisiert werden können...

Leider scheitert das Ganze bereits an folgender Sourcecode-Zeile :


protected override void Serialize(object o, XmlSerializationWriter writer)
    {            
      if(o is IDictionary) // <- Hier meckert nun der Compiler, dass für IDictionary zwei Typen erforderlich sind
      {
        //...
      }

      base.Serialize(o, writer);
    }

Ich will nun natürlich nicht auf zwei konkrete Typen überprüfen, sondern ich hätte gerne sowas wie IDictionary<?, ?>, was es ja z.B. bei Java schon gibt...

Hätte da jemand eine Lösung ?

Danke schonmal ...

"It is not wise to be wise" - Sun Tzu

S
8.746 Beiträge seit 2005
vor 17 Jahren

Ja, baue dir ein serialisierbares Dictionary:

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von svenson
Ja, baue dir ein serialisierbares Dictionary:


>

Der Weg über den CustomSerializer geht nur mit nicht generischen Dictionaries.

L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 17 Jahren

Schade, also hinkt C# hier Java leider hinterher 😦

Trotzdem danke !

"It is not wise to be wise" - Sun Tzu

S
8.746 Beiträge seit 2005
vor 17 Jahren

Ich persönlich finde grundsätzlich den Ansatz des Custom Serializers für schlechte Architektur, denn die Logik sitzt damit an der falschen Stelle (führt zu unnötiger Kopplung). ISerializable ist deutlich besser. Warum MS das beim generischen Dictionary nicht implementiert hat, ist allerdings völlig unverständlich.

476 Beiträge seit 2004
vor 17 Jahren

hallo,

Original von svenson

Original von svenson
Ja, baue dir ein serialisierbares Dictionary:


>>

Der Weg über den CustomSerializer geht nur mit nicht generischen Dictionaries.

ob sinnvoll oder nicht, sei mal dahingestellt, aber das müsste mit Hilfe von Reflection (Namespace System.Reflection) auch mit generischen Dictionaries zu lösen sein.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

S
8.746 Beiträge seit 2005
vor 17 Jahren

Müßte, aber eben nicht auf Basis des XmlSerializers. Ursache ist wohl ein Bug, bzw. ein problematisches Vehalten, bzw. schlechte Architektur. Hab leider den Links mit der zugehöigen Diskussion verschlampt.