我有一个自定义表单对象结构,我成功使用mongodb。
我一直在研究用DocumentDb替换Mongo的可能性。
我的类结构由不同类型的控件继承的基本控件组成。例如文本框控件,下拉控件
在mongo中我使用discriminator字段来存储实际类型,在c#DocumentDb驱动程序中我看不到找到相同的功能。
下面是mongo如何存储我的类结构的示例。
{
"_t" : "TextboxControl",
"LabelText" : "Location of incident",
"IsRequired" : true,
"_id" : "cbe059d9-b6a9-4de2-b63b-14d44b022e37"
}
在documentdb中,结构看起来像
{
"LabelText": "Location of incident",
"IsRequired": true,
"id": "cbe059d9-b6a9-4de2-b63b-14d44b022e37"
}
正如您所看到的那样,mongo版本具有一个“_t”属性来说明实际类型,然后在读取数据时使用它来创建正确的类型。在documentdb版本中,它只是一个字段类型
答案 0 :(得分:3)
经过数周的搜索,我终于找到了答案
https://github.com/markrexwinkel/azure-docdb-linq-extension
这个库基本上扩展了DocumentDb的C#SDK,允许应用自定义JSON设置。在幕后,documentdb驱动程序用户json.net。
我现在得到了财产" $ type"这是一个内置于newtonsoft的优秀json.net库中的功能。
我的json现在看起来像
{
"$type" : "MyNameSpace.DropDownSingleFormBuilderControlTemplate, MyLibrary",
"LabelText" : "Label Text"
"IsRequired" : true,
"_id" : "cbe059d9-b6a9-4de2-b63b-14d44b022e37"
}
答案 1 :(得分:1)
我认为他们增加了对jsonserializer的支持。您可以通过
RequestOptions,TypeNameHandling.All
var s = new RequestOptions(){ JsonSerializerSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }}
var result = await Client.CreateDocumentAsync(CollectionUri, @event2, s);