2009-06-10 14 views
1

Ich entwickle eine modulare App mit Prisma in SL3, eines der Module ist verantwortlich für die Anwendung Einstellungen im isolierten Speicher (so dass, wenn Sie die App das nächste Mal öffnen, Sie fortsetzen, wo Sie waren). Es funktioniert perfekt, aber ich mag es nicht, wie Abhängigkeiten jetzt verkabelt sind.Serializer-Bibliothek für Silverlight

Ich möchte eine Art unabhängige Einstellungen Manager haben, die einen allgemeinen Speicher hat und dann füge ich benutzerdefinierte Daten von jedem Modul, etwas, was wie folgt aus:

AppSettings["OpenForEditEmployees"] = new List<EmployeeDTO>(); 
AppSettings["ActiveView"] = ViewsEnum.Report; 

ich diesen Teil umgesetzt haben, aber Serialisierung, dass Wörterbuch zu XML erwies sich als härter als ich vermutete. Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, eine Dictionary<string, object> in XML zu serialisieren.

Antwort

1

Haben Sie bei json.net sah http://json.codeplex.com/

Es ist nicht XML, aber es macht einen guten Job mit Serialisierung.

Und funktioniert super in Silverlight.

2

Da Sie ein Dictionary verwenden, funktioniert der reguläre XmlSerializer nicht, Sie können Serializer mit DataContractSerializer serialisieren.

Diese 2 statische Klassen werden alle Ihre Serialisierung Griff/Deserialisierung muss für String-Darstellung von XML in Silverlight (und jeder .NET)

Sie werden für die DataContractSerializer

einen Verweis auf System.Runtime.Serialization brauchen
public static void SerializeXml<T>(T obj, Stream strm) 
{ 
    DataContractSerializer ser = new DataContractSerializer(typeof(T)); 
    ser.WriteObject(strm, obj); 
} 

public static T DeserializeXml<T>(Stream xml) 
{ 
    DataContractSerializer ser = new DataContractSerializer(typeof(T)); 
    return (T)ser.ReadObject(xml); 
} 

und wenn Sie lieber JSON verwenden möchten, können Sie der System.ServiceModel.Web-Assembly einen Verweis hinzufügen und stattdessen diese Version verwenden.

public static void SerializeJson<T>(T obj, Stream strm) 
{ 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
    ser.WriteObject(strm, obj); 
} 

public static T DeserializeJson<T>(Stream json) 
{ 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
    return (T)ser.ReadObject(json); 
} 
Verwandte Themen