3 回答

TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
關(guān)于XML序列化的問題不僅在于創(chuàng)建字節(jié)流。它還與創(chuàng)建此字節(jié)流將針對其進(jìn)行驗證的XML模式有關(guān)。XML Schema中沒有很好的方法來表示字典。您能做的最好的就是證明有一個唯一的鑰匙。
您始終可以創(chuàng)建自己的包裝器,例如“序列化詞典的一種方法”。

TA貢獻(xiàn)1848條經(jīng)驗 獲得超2個贊
我知道以前已經(jīng)回答過這個問題,但是由于我有一個非常簡潔的方法(代碼)來使用DataContractSerializer類(由WCF使用,但可以并且應(yīng)該在任何地方使用)進(jìn)行IDictionary序列化,所以我不能拒絕在這里提供它:
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);
}
}
}
盡管我尚未對其進(jìn)行測試,但它在.NET 4中可以完美地工作,并且在.NET 3.5中也可以工作。
更新:它不支持 .NET Compact Framework(甚至Windows Phone 7的NETCF 3.7也不適用)DataContractSerializer!
我將流式傳輸?shù)阶址且驗樗鼘ξ襾碚f更方便,盡管我可以將較低級別的序列化引入Stream,然后用它來序列化為字符串,但是我傾向于只在需要時進(jìn)行泛化(就像過早的優(yōu)化是邪惡的一樣) ,這是過早的概括...)
用法很簡單:
// 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將是myDict的逐字記錄副本。
您還將注意到,提供的通用方法將能夠序列化任何類型(據(jù)我所知),因為它不僅限于IDictionary接口,它實際上可以是任何通用類型T。
希望它可以幫助某個人!
- 3 回答
- 0 關(guān)注
- 422 瀏覽
添加回答
舉報