Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Custom XmlSerializer ?
Lynix
myCSharp.de - Member



Dabei seit:
Beiträge: 670
Herkunft: Saarland

Themenstarter:

Custom XmlSerializer ?

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

Ja, baue dir ein serialisierbares Dictionary:
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

Zitat
Original von svenson
Ja, baue dir ein serialisierbares Dictionary:
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

Der Weg über den CustomSerializer geht nur mit nicht generischen Dictionaries.
private Nachricht | Beiträge des Benutzers
Lynix
myCSharp.de - Member



Dabei seit:
Beiträge: 670
Herkunft: Saarland

Themenstarter:

beantworten | zitieren | melden

Schade, also hinkt C# hier Java leider hinterher :-(

Trotzdem danke !
"It is not wise to be wise" - Sun Tzu
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo,
Zitat
Original von svenson
Zitat
Original von svenson
Ja, baue dir ein serialisierbares Dictionary:
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

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
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers