Silverlight的Serializer库

时间:2009-06-10 00:57:02

标签: silverlight xml-serialization isolatedstorage

我正在使用SL3中的prism开发一个模块化应用程序,其中一个模块负责将应用程序设置保存在隔离存储中(这样当您下次打开应用程序时,您将继续前进)。它工作得很好,除了我不喜欢现在连接依赖的方式。

我希望有一个类型无关的设置管理器,它有一个通用存储,然后我从每个模块添加自定义数据,有点像这样:

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

我已经实现了这一部分,但将字典序列化为xml证明比我怀疑的更难。我想知道是否有一种简单的方法可以将Dictionary<string, object>序列化为XML。

2 个答案:

答案 0 :(得分:2)

由于您使用的是Dictionary,常规XmlSerializer不起作用,您可以使用DataContractSerializer进行序列化。

这两个静态类将处理Silverlight(以及任何.NET)中xml的字符串表示的所有序列化/反序列化需求

您需要为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);
}

答案 1 :(得分:1)

你看过json.net吗? http://json.codeplex.com/

它不是XML,但它在序列化方面做得很好。

而且,在Silverlight中运行良好。