2009-06-10 18 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); 
}