Ton*_*pia 12 c# serialization dictionary insert mongodb
我处于无法预测MongoDB文档将包含哪些字段的情况.所以我不能再创建一个具有_id类型字段的对象BsonID.我发现创建一个Dictionary(HashTable)并在我的需要中多次添加我的DateTime和String对象非常方便.
然后我尝试将生成的Dictionary对象插入MongoDb,但默认序列化失败.
这是我的类型HashTable的对象(如字典,但内部有不同的类型):
{ "_id":"",
"metadata1":"asaad",
"metadata2":[],
"metadata3":ISODate("somedatehere")}
Run Code Online (Sandbox Code Playgroud)
我得到的驱动程序的错误是:
Serializer DictionarySerializer期望类型为DictionarySerializationOptions的序列化选项,而不是DocumentSerializationOptions
我用Google搜索,但找不到任何有用的东西.我究竟做错了什么?
Rob*_*tam 18
驱动程序需要能够找到_id字段.您可以创建一个只有两个属性的C#类:Id和Values.
public class HashTableDocument
{
public ObjectId Id { get; set; }
[BsonExtraElements]
public Dictionary<string, object> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,我们必须使用Dictionary <string,object>而不是Hashtable.
然后,您可以使用以下代码插入文档:
var document = new HashTableDocument
{
Id = ObjectId.GenerateNewId(),
Values = new Dictionary<string, object>
{
{ "metadata1", "asaad" },
{ "metadata2", new object[0] },
{ "metadata3", DateTime.UtcNow }
}
};
collection.Insert(document);
Run Code Online (Sandbox Code Playgroud)
我们可以使用MongoDB shell来确认插入的文档是否具有所需的形式:
> db.test.find().pretty()
{
"_id" : ObjectId("518abdd4e447ad1f78f74fb1"),
"metadata1" : "asaad",
"metadata2" : [ ],
"metadata3" : ISODate("2013-05-08T21:04:20.895Z")
}
>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10236 次 |
| 最近记录: |