2009-06-10 1 views
1

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

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

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

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

ответ

1

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

Это не XML, но он делает большую работу с сериализации.

И, отлично работает в Silverlight.

2

Поскольку вы используете словарь, обычный 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); 
}