Библиотека сериализатора для Silverlight - PullRequest
1 голос
/ 10 июня 2009

Я разрабатываю модульное приложение с использованием призмы в SL3, один из модулей отвечает за сохранение настроек приложения в изолированном хранилище (чтобы при следующем открытии приложения вы продолжали оставаться там, где были). Это работает отлично, за исключением того, что мне не нравится, как теперь связаны зависимости.

Я хочу иметь независимый от типа менеджер настроек, который имеет общее хранилище, а затем я добавляю пользовательские данные из каждого модуля, что-то вроде этого:

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

Я реализовал эту часть, но сериализовать этот словарь в xml оказалось сложнее, чем я подозревал. Мне было интересно, есть ли простой способ сериализации Dictionary<string, object> в XML.

Ответы [ 2 ]

2 голосов
/ 25 июля 2009

Поскольку вы используете словарь, обычный XmlSerializer не будет работать, вы можете сериализовать с помощью DataContractSerializer.

Эти 2 статических класса будут обрабатывать все ваши потребности в сериализации / десериализации для строкового представления xml в silverlight (и любом .NET)

Вам понадобится ссылка на System.Runtime.Serialization для DataContractSerializer

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 голос
/ 10 июня 2009

Вы смотрели на json.net http://json.codeplex.com/

Это не XML, но он отлично справляется с сериализацией.

И прекрасно работает в Silverlight.

...