我正在使用词典。在 .insert()之后有“_t”和“_v”。这里有两篇帖子谈到serialization转换为JSON first then BSON。我正在使用MongoDB的驱动程序v2.4.3,
mCollection.InsertOne(x);
IMongoCollection<myDoc> mCollection = Db.GetCollection<myDoc>("whatever");
如果我执行JSON-to-BSON,它会抱怨无法将BsonDocument转换为myDoc。切换到IMongoCollection<BsonDocument> mCollection = Db.GetCollection<BsonDocument>("whatever");
仍然获得_t和_v。
如何避免_t和_v?
这是我的数据类型和利用率代码:
public class myObjForDictionary
{
//...
}
public class myDoc
{
// ... some other elements, then Dictionary
public Dictionary<string, object> myDictionary { get; set; }
}
// to instantiate the
class myClass
{
// define MongoDB connection, etc.
// instantiate myDoc and populate data
var x = new myDoc
{
//...
myDictionary = new Dictionary<string, object>
{
{ "type", "something" },
{ "Vendor", new object[0] },
{ "obj1", //data for myObjForDictionary
}
};
}
}
答案 0 :(得分:1)
您需要保存一些信息(_t
),以了解反序列化器在对对象进行反序列化时需要创建哪些对象,如果不这样做,它将无法从BSON中知道要创建什么。
或者,您可以将Dictionary<string, object>
更改为Dictionary<string, BsonDocument>
并直接在代码中处理BsonDocument
。这与您在JObject
中使用Newtonsoft.Json
的方式非常相似。
答案 1 :(得分:0)
我认为您正在寻找DictionarySerializationOption ...它会为您提供一些开箱即用的不同选项,以确定字典的序列化方式。