1

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

我想要一个与类型无关的设置管理器,它有一个通用存储,然后我从每个模块添加自定义数据,如下所示:

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

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

4

2 回答 2

2

由于您使用的是字典,因此常规 XmlSerializer 将不起作用,您可以使用 DataContractSerializer 进行序列化。

这 2 个静态类将处理您在 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);
}
于 2009-07-25T17:06:24.353 回答
1

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

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

而且,在 Silverlight 中效果很好。

于 2009-06-10T02:32:51.280 回答