0

couchbaseから戻ってきたJSONを動的タイプに逆シリアル化しようとしています。ドキュメントは次のようなものなので、このためのPOCOを作成するのはやり過ぎでしょう。

{
    UsersOnline: 1
}

このようなものでうまくいくと思いましたが、値が元のJSONである動的オブジェクトに逆シリアル化されているようです

var jsonObj = _client.GetJson<dynamic>(storageKey);

結果:

jsonObj { "online": 0 }

とにかく、couchbaseデシリアライザーに動的タイプを生成させることはできますか?

乾杯

4

1 に答える 1

1

クライアントのデフォルトのデシリアライザーは.NETのバイナリシリアライザーを使用するため、JSON文字列を保存または読み取る場合、それは単なる文字列です。GetJsonは常に文字列を返すだけです。ただし、いくつかのオプションがあります。

JSONレコードをDictionaryインスタンスに変換できます。

var appJson = "{ \"UsersOnline\" : 1, \"NewestMember\" : \"zblock\" }";
var result = client.ExecuteStore(StoreMode.Set, "userCount", appJson);
var item = client.GetJson<Dictionary<string, object>>("userCount");
Console.WriteLine("There are {0} users online.  The newest member is {1}.",
                    item["UsersOnline"], item["NewestMember"]);

または、動的なExpandoObjectインスタンスを使用できます。

var appJson = "{ \"UsersOnline\" : 1, \"NewestMember\" : \"zblock\" }";
var result = client.ExecuteStore(StoreMode.Set, "userCount", appJson);
dynamic item = client.GetJson<ExpandoObject>("userCount");
Console.WriteLine("There are {0} users online.  The newest member is {1}.",
                    item.UsersOnline, item.NewestMember);

どちらの場合でも、静的型チェックが失われます。これは、目的に問題がないようです。どちらの場合も、JSONをPOCOに解析しなくてもJSONプロパティにアクセスできます...

編集:私は役立つかもしれないいくつかの拡張メソッドを書き、それらについてhttp://blog.couchbase.com/moving-no-schema-stack-c-and-dynamic-typesでブログに書きました。

于 2013-01-28T19:40:46.770 に答える