1

SL3 でプリズムを使用してモジュラー アプリを開発しています。モジュールの 1 つは、アプリケーション設定を分離ストレージに永続化する役割を果たします (次回アプリを開いたときに、元の場所から続行できるようにします)。依存関係が現在配線されている方法が気に入らないことを除いて、それは完全に機能します。

ジェネリックストアを持つタイプに依存しない設定マネージャーが必要であり、各モジュールからカスタムデータを追加します。次のようなものです。

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

この部分を実装しましたが、その辞書を xml にシリアライズするのは思ったより難しいことがわかりました。Dictionary<string, object>aを XMLにシリアライズする簡単な方法があるかどうか疑問に思っていました。

4

2 に答える 2

2

Dictionary を使用しているため、通常の 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 に答える