第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么.NET中沒有XML可序列化的字典?

為什么.NET中沒有XML可序列化的字典?

嗶嗶one 2019-10-17 14:58:02
我需要一個XML可序列化的字典。實際上,我現(xiàn)在有兩個非常不同的程序,需要一個??吹?NET沒有它,我感到非常驚訝。我在其他地方問了這個問題,并得到了諷刺的回答。我不明白為什么這是一個愚蠢的問題。鑒于各種.NET功能對XML序列化的依賴性如何,有人可以啟發(fā)我,為什么沒有XML可序列化的字典。希望您也可以解釋為什么有些人認(rèn)為這個愚蠢的問題。我想我必須缺少一些基本知識,希望您能夠填補(bǔ)空白。
查看完整描述

3 回答

?
Cats萌萌

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)建自己的包裝器,例如“序列化詞典的一種方法”。


查看完整回答
反對 回復(fù) 2019-10-17
?
慕尼黑5688855

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。


希望它可以幫助某個人!


查看完整回答
反對 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 422 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號