如何在插入MongoDB时阻止_t和_v?

时间:2017-03-22 05:50:01

标签: c# mongodb

我正在使用词典。在 .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?

enter image description here

这是我的数据类型和利用率代码:

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
                }
            };
        }

    }

2 个答案:

答案 0 :(得分:1)

您需要保存一些信息(_t),以了解反序列化器在对对象进行反序列化时需要创建哪些对象,如果不这样做,它将无法从BSON中知道要创建什么。

或者,您可以将Dictionary<string, object>更改为Dictionary<string, BsonDocument>并直接在代码中处理BsonDocument。这与您在JObject中使用Newtonsoft.Json的方式非常相似。

答案 1 :(得分:0)

我认为您正在寻找DictionarySerializationOption ...它会为您提供一些开箱即用的不同选项,以确定字典的序列化方式。