客户端的默认反序列化程序使用 .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 属性,而无需将 JSON 解析为 POCO...
编辑:我写了一些可能有用的扩展方法,并在http://blog.couchbase.com/moving-no-schema-stack-c-and-dynamic-types