7

私は ServiceStack.OrmLite を使用してSQLiteデータベースにデータを保持していますが、これまでのところ非常に満足しています。

ただし、私のオブジェクトの多くには、 を使用してシリアル化したくない複雑な型のプロパティがありますJSV

プロパティをデータベースに (文字列として) 格納するために使用するカスタムのシリアライゼーション/デシリアライゼーションを指定できる必要があります。世界では、db4oこれは によって提供される翻訳機能を使用することと同等IObjectConstructorです。

適切にシリアル化および逆シリアル化できない複雑な型の良い例は、文字列に簡単にマップできるにもかかわらず、NodaTime 型です (私は で使用したシリアル化/逆シリアル化関数を既に持っていますdb4o)。

それを達成する最も簡単な方法は何ですか?この複雑な型のプロパティを含む型ごとにラッパーを作成して維持する必要があるため、ラッパーはあまり便利ではありません。

4

3 に答える 3

2

複雑な型をシリアル化するには、独自のシリアライザー (およびデシリアライザー) を次のように設定しますJsConfig

JsConfig<Foo>.SerializeFn = foo => foo.ToString("XOXO", CultureInfo.InvariantCulture);
JsConfig<Foo>.DeSerializeFn = foo =>
{
    var result = Foo.Parse(foo, CultureInfo.InvariantCulture);
    return result;
};

UTC 日付を想定するように JsConfig に指示することもできます。

JsConfig.Init(new Config {
    JsConfig.AssumeUtc = true
});
于 2013-11-27T12:37:01.927 に答える