Ich weiß, das vor beantwortet wurde, aber da ich eine sehr prägnante Art und Weise (Code) zu tun IDictionary Serialisierung mit der DataContractSerializer Klasse (verwendet von WCF, aber könnte und soll überall dort eingesetzt werden) I couldn‘ t wider es hier einen Beitrag:
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);
}
}
}
Das funktioniert perfekt in .NET 4 und sollte auch .NET 3.5 arbeiten, obwohl ich es noch nicht getestet habe.
UPDATE: Es nicht Arbeit in .NET Compact Framework (nicht einmal NETCF 3.7 für Windows Phone 7) als DataContractSerializer
wird nicht unterstützt!
Ich habe das streaming zu string, weil es für mich bequemer war, obwohl ich könnte eine niedrigere Serialisierung zu Stream eingeführt haben und dann verwendet, um zu Strings serialisieren, aber ich verallgemeinere nur bei Bedarf (genau wie vorzeitige Optimierung ist böse, es ist also eine vorzeitige Verallgemeinerung ...)
Die Nutzung ist sehr einfach:
// dictionary to serialize to string
Dictionary<string, object> myDict = new Dictionary<string, object>();
// add items to the dictionary...
myDict.Add(...);
// serialization is straight-forward
string serialized = myDict.Serialize();
...
// deserialization is just as simple
Dictionary<string, object> myDictCopy =
serialized.Deserialize<Dictionary<string,object>>();
myDictCopy eine wortgetreue Kopie myDict sein wird.
Sie werden auch feststellen, dass die zur Verfügung gestellten generischen Methoden der Lage, jede Art serialisiert werden (nach bestem Wissen und Gewissen), da es nicht auf IDictionary Schnittstellen begrenzt ist, kann es sein, wirklich alle generischen Typ T.
Hoffe es hilft jemandem da draußen!
Die Frage ist falsch, weil Ursache und Wirkung falsch sind. Es sollte sein, "warum' XmlSerializer' Wörterbücher nicht serialisieren kann "? Es gibt viele Möglichkeiten, die XML-Serialisierung in .NET durchzuführen, und die meisten von ihnen serialisieren Wörterbücher ('DataContractSerializer',' SoapFormatter' ...). –
Ich vermute, Sie haben nicht "XmlDictionaryWriter.CreateDictionaryWriter" ... oder die 100 anderen Möglichkeiten, Wörterbücher in .NET zu serialisieren (einige von ihnen sind eingebaut). ... Warum brauchst du auch ein Wörterbuch? Ich habe immer stark typisierte Objekte gefunden, die besser funktionieren, warum implementiere ich nicht einfach eine Klasse mit [DataContract] und IExtensibleDataObject? – BrainSlugs83
Welche modernen .NET-Funktionen sind Ihrer Meinung nach von der XML-Serialisierung abhängig? Konfigurationsdateien verwenden keine Serialisierung, und ASMX-Webdienste sind nur für die ältere Verwendung vorgesehen. (bewegt, um aus der Antwort zu kommentieren) –