2009-06-10 19 views
1

我正在開發一個在SL3中使用棱鏡的模塊化應用程序,其中一個模塊負責在獨立存儲器中保存應用程序設置(以便在下次打開應用程序時繼續您的位置)。它完美的工作,除了我不喜歡現在依賴關係的方式。適用於Silverlight的串行器庫

我想有有一個通用的商店類型無關的設置管理器,然後我從每個模塊添加自定義的數據,有些事情是這樣的:

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

我已經實現了一部分,但是連載的是字典到xml證明比我懷疑更難。我想知道是否有一種簡單的方法將Dictionary<string, object>連載到XML中。

回答

2

由於您使用的是Dictionary,常規的XmlSerializer將無法正常工作,您可以使用DataContractSerializer進行序列化。

這2種靜態類將處理所有的序列化/反序列化需求在Silverlight中的XML字符串表示(以及任何.NET)

您將需要DataContractSerializer的

到System.Runtime.Serialization參考
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); 
} 

如果您更願意使用JSON,則可以添加對System.ServiceModel.Web程序集的引用並改爲使用此版本。

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); 
}