Добавление сложных классов в Mongo

У меня возникают проблемы при попытке добавить сложные типы в существующие документы в Mongo.

У меня есть два следующих класса.

public class UserObjectCollection {

    [BsonId]
    public Guid UserId { get; set; }

    public Dictionary<string, object> UserObjects { get; set; }

    public UserObjectCollection() {
        UserObjects = new Dictionary<string, object>();
    }
}

public class ComplexClass {
    public string Bar { get; set; }
    public int Foo { get; set; }
}

Затем я создаю новый объект для вставки.

var bd = new UserObjectCollection() {
    UserId = Guid.NewGuid(),
    UserObjects = {
        { "data", 12 },
        { "data2", 123 },
        { "data3", new ComplexClass() { Bar= "bar", Foo=1234 } }
    }
};

Вставляю document.

mongoCollection.Insert(bd.ToBsonDocument());

И я получаю итоговый документ.

{"_id": BinData (3, "t089M1E1j0OFVS3YVuEDwg =="), "UserObjects": {"data": 12, "data2": 123, "data3": {"_t": "ComplexClass", "Bar": "bar", "Foo": 1234} }}

Документ вставлен правильно. Затем я изменяю одно из значений.

var query = Query.EQ("UserObjects.data", BsonValue.Create(12));

collection.FindAndModify(
  query, 
  SortBy.Null, 
  Update.SetWrapped<ComplexClass>("data2", new ComplexClass() { Foo = -1234, Bar = "FooBar" }),
  returnNew: false, 
  upsert: true);

Документ в том виде, в каком он отображается в базе данных.

{"UserObjects": {"data": 12, "data2": {"Bar": "FooBar", "Foo" ": -1234}, "data3": {"_t": "ComplexClass", "Bar": "bar", "Foo": 1234}}, "_id": BinData (3, "W11Jy + hYqE2nVfrBdxn54g ==")}

Если Я пытаюсь получить эту запись, я получаю FileFormatException.

var theDocument = collection.Find(query).First();

(Необработанное исключение: System.IO.FileFormatException: невозможно определить фактическое t тип объекта для десериализации. NominalType - это System.Object, а BsonType - это Docum. ent.).

В отличие от data3, data2 не имеет дискриминатора. Что я делаю?

6
задан Vince Panuccio 7 August 2011 в 23:36
поделиться