2009-04-30 4 views
1

In der Anwendung (C#), die ich behalte, sind einige serialisierte Objekte in der Datenbank gespeichert, und einige sind vor mehreren Versionen erstellt.SoapFormatter Versionierungsproblem

Nun, wenn die Anwendung diese Objekte deserialisieren versucht, wirft es eine Ausnahme: Parse-Fehler, keine Montage mit Xml Schlüssel zugeordnet ist .... (der Assembly-Name und Version)

Wie ich verstehe es, wenn Der SoapFormatter versucht, das Objekt zu deserialisieren, es prüft zuerst, ob die Deserialisierungs-Assembly die gleiche wie Serialisierungsassembly ist, und wenn nicht, wird die obige Fehlermeldung ausgegeben. Wäre das der Fall?

Wenn dies der Fall ist, ist es eine Möglichkeit, die alten Daten zu konvertieren, um sie durch die neueste Version der App lesbar zu machen?

Auf einer Seite beachten, ich denke, ein Programm zu schreiben, den gleichen Montag Namen und die Version haben, so zu tun, die gleiche Anordnung sein, die diese Objekte serialisiert, ist es möglich?

Antwort

0

XSLT-Transformation von Jordan erwähnt wird wahrscheinlich funktionieren, aber in meinem Fall ich brauche ein paar Attribute und Knotennamen es ziemlich kompliziert machen zu ändern.

ich nur Regex.Replace landete verwenden die geänderte Montagenamen und Elementnamen zu konvertieren, mit so etwas wie folgt aus:

newData = Regex.Replace(textData, "(" + String.Join("|", keys) + ")", 
         new MatchEvaluator(this.EvaluateReplacement)); 

string EvaluateReplacement(Match m) 
{ 
    if (this.convertDict.ContainsKey(m.Value)) 
    { 
     return this.convertDict[m.Value]; 
    } 
    return m.Value; 
} 

wo this.convertDict ein Dictionary-Objekt ist die Umwandlung Zuordnungen enthält.

1

Ich habe nicht versucht, aber ich frage mich, ob Sie XSLT verwenden könnte die ältere Version auf eine neuere „Version“ Struktur zu transformieren.

+0

Danke für die Antwort, aber die serialisierte Objekte sind nicht in XML, sondern in einer Art von binären Daten wie „PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3d ....“ – FlyinFish

+0

Ich habe erkannt, dass es nur eine Zeichenfolge von Memorystream wird die xml in gespeichert umgewandelt wird. Jetzt kann ich diese Zeichenfolge wieder in XML konvertieren. Ich werde einen Vorschlag machen, danke Jordan! – FlyinFish