Ich weiß, dass dies bereits beantwortet wurde, aber da ich eine sehr präzise Methode (Code) für die IDictionary-Serialisierung mit der DataContractSerializer-Klasse habe (von WCF verwendet, aber überall verwendet werden könnte und sollte), konnte ich nicht widerstehen, sie hier beizutragen:
public static class SerializationExtensions
{
public static string Serialize<T>(this T obj)
{
var serializer = new DataContractSerializer(obj.GetType());
using (var writer = new StringWriter())
using (var stm = new XmlTextWriter(writer))
{
serializer.WriteObject(stm, obj);
return writer.ToString();
}
}
public static T Deserialize<T>(this string serialized)
{
var serializer = new DataContractSerializer(typeof(T));
using (var reader = new StringReader(serialized))
using (var stm = new XmlTextReader(reader))
{
return (T)serializer.ReadObject(stm);
}
}
}
Dies funktioniert perfekt in .NET 4 und sollte auch in .NET 3.5 funktionieren, obwohl ich es noch nicht getestet habe.
UPDATE: Es funktioniert nicht in .NET Compact Framework (nicht einmal NETCF 3.7 für Windows Phone 7), da das DataContractSerializer
nicht unterstützt wird!
Ich habe das Streaming zu String durchgeführt, weil es für mich bequemer war, obwohl ich Stream auf niedrigerer Ebene hätte serialisieren und dann zum Serialisieren in Strings verwenden können, aber ich neige dazu, nur bei Bedarf zu verallgemeinern (genau wie vorzeitige Optimierung böse ist , also ist es vorzeitige Verallgemeinerung ...)
Die Verwendung ist sehr einfach:
Dictionary<string, object> myDict = new Dictionary<string, object>();
myDict.Add(...);
string serialized = myDict.Serialize();
...
Dictionary<string, object> myDictCopy =
serialized.Deserialize<Dictionary<string,object>>();
myDictCopy ist eine wörtliche Kopie von myDict.
Sie werden auch feststellen, dass die bereitgestellten generischen Methoden in der Lage sind, jeden Typ (nach meinem besten Wissen) zu serialisieren, da er nicht auf IDictionary-Schnittstellen beschränkt ist, sondern wirklich jeder generische Typ T sein kann.
Hoffe es hilft jemandem da draußen!
XmlSerializer
können Wörterbücher nicht serialisiert werden?" Weil es in .NET viele Möglichkeiten gibt, XML-Serialisierung durchzuführen, und die meisten von ihnen Wörterbücher problemlos serialisieren (DataContractSerializer
,SoapFormatter
...).