Couchbase 精简版 2 + JsonConvert
Couchbase Lite 2 + JsonConvert
以下代码示例将一个简单对象写入 couchbase lite(版本 2)数据库,然后读取所有对象。这是你可以在官方文档中找到的here
这是相当多的手动输入,因为每个对象的每个 属性 都必须转移到 MutableObject
。
class Program
{
static void Main(string[] args)
{
Couchbase.Lite.Support.NetDesktop.Activate();
const string DbName = "MyDb";
var db = new Database(DbName);
var item = new Item { Name = "test", Value = 5 };
// Serialization HERE
var doc = new MutableDocument();
doc.SetString("Name", item.Name);
doc.SetInt("Value", item.Value);
db.Save(doc);
using (var qry = QueryBuilder.Select(SelectResult.All())
.From(DataSource.Database(db)))
{
foreach (var result in qry.Execute())
{
var resultItem = new Item
{
// Deserialization HERE
Name = result[DbName].Dictionary.GetString("Name"),
Value = result[DbName].Dictionary.GetInt("Value")
};
Console.WriteLine(resultItem.Name);
}
}
Console.ReadKey();
}
class Item
{
public string Name { get; set; }
public int Value { get; set; }
}
}
根据我的研究,Couchbase lite 在内部使用 JsonConvert,因此可能有一种方法可以在 JsonConvert 的帮助下简化所有这些。
任何类似的东西:
var json = JsonConvert.SerializeObject(item);
var doc = new MutableDocument(json); // No overload to provide raw JSON
或者也许
var data = JsonConvert.SerializeToDict(item); // JsonConvert does not provide this
var doc = new MutableDocument(data);
是否存在某种优化,首选方法是有意为之?
我不知道 JsonConvert,但似乎有一个构造函数将 IDictionary<string, object>
作为参数。所以我会尝试这样的事情(大脑编译):
MutableDocument CreateDocument(object data)
{
if (data == null) return null;
var propertyValues = new Dictionary<string, object>();
foreach (var property in data.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
propertyValues[property.Name] = property.GetValue(data);
}
return new MutableDocument(propertyValues);
}
看看这是否有效。
人们经常问这个问题,但 Couchbase Lite 实际上并没有在数据库中存储 JSON 字符串。它们以不同的格式存储,因此这不会带来您认为的好处(JSON 需要重新解析,然后分解为其他格式)。我一直在推动一种直接序列化 类 的方法,而不是通过字典对象(这似乎是这里的最终目标),但我们的首要任务是企业客户想要的东西,而这似乎不是一个他们中的。请注意,要使其进入,需要在 C# Java 和 Objective-C / Swift 中实现。
以下代码示例将一个简单对象写入 couchbase lite(版本 2)数据库,然后读取所有对象。这是你可以在官方文档中找到的here
这是相当多的手动输入,因为每个对象的每个 属性 都必须转移到 MutableObject
。
class Program
{
static void Main(string[] args)
{
Couchbase.Lite.Support.NetDesktop.Activate();
const string DbName = "MyDb";
var db = new Database(DbName);
var item = new Item { Name = "test", Value = 5 };
// Serialization HERE
var doc = new MutableDocument();
doc.SetString("Name", item.Name);
doc.SetInt("Value", item.Value);
db.Save(doc);
using (var qry = QueryBuilder.Select(SelectResult.All())
.From(DataSource.Database(db)))
{
foreach (var result in qry.Execute())
{
var resultItem = new Item
{
// Deserialization HERE
Name = result[DbName].Dictionary.GetString("Name"),
Value = result[DbName].Dictionary.GetInt("Value")
};
Console.WriteLine(resultItem.Name);
}
}
Console.ReadKey();
}
class Item
{
public string Name { get; set; }
public int Value { get; set; }
}
}
根据我的研究,Couchbase lite 在内部使用 JsonConvert,因此可能有一种方法可以在 JsonConvert 的帮助下简化所有这些。
任何类似的东西:
var json = JsonConvert.SerializeObject(item);
var doc = new MutableDocument(json); // No overload to provide raw JSON
或者也许
var data = JsonConvert.SerializeToDict(item); // JsonConvert does not provide this
var doc = new MutableDocument(data);
是否存在某种优化,首选方法是有意为之?
我不知道 JsonConvert,但似乎有一个构造函数将 IDictionary<string, object>
作为参数。所以我会尝试这样的事情(大脑编译):
MutableDocument CreateDocument(object data)
{
if (data == null) return null;
var propertyValues = new Dictionary<string, object>();
foreach (var property in data.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
propertyValues[property.Name] = property.GetValue(data);
}
return new MutableDocument(propertyValues);
}
看看这是否有效。
人们经常问这个问题,但 Couchbase Lite 实际上并没有在数据库中存储 JSON 字符串。它们以不同的格式存储,因此这不会带来您认为的好处(JSON 需要重新解析,然后分解为其他格式)。我一直在推动一种直接序列化 类 的方法,而不是通过字典对象(这似乎是这里的最终目标),但我们的首要任务是企业客户想要的东西,而这似乎不是一个他们中的。请注意,要使其进入,需要在 C# Java 和 Objective-C / Swift 中实现。