Всякий раз, когда вы звоните _equips.Find(...)
и в вашей базе данных есть соответствующий документ, вы получаете экземпляр BsonDocument , специальный тип, представленный драйвером MongoDB .NET. Этот специальный класс представляет свои собственные оболочки типа .NET. Вместо string
вы получите BsonString
, вместо int
у нас будет BsonInt32
и так далее. Очевидно, что вы можете конвертировать их в типы .NET, но когда вы запрашиваете данные, вы получаете типы Bson в качестве полей документа.
Вы не упомянули, как создается docRoot
, но на основании вашего изображения похоже, что вы используете библиотеку Json.NET . Говоря «docRoot - это строка JSON, которая НЕ содержит объект equipmentId», вы, вероятно, подразумеваете, что docRoot
- это dynamic
.NET-объект, созданный более или менее, как показано ниже:
dynamic docRoot = JsonConvert.DeserializeObject<dynamic>("{}");
Так как вы 'перестраивая JSON
, вы должны иметь возможность использовать только типы, которые могут быть преобразованы в типы JSON. Подробнее здесь . За кадром ваш docRoot
имеет тип DynamicProxyMetaObject
, и всякий раз, когда вы пытаетесь присвоить какое-либо значение, он запускает этот метод.
Чтобы исправить это, вам необходимо преобразовать значение из BsonString
в обычное .NET string
, что можно сделать одним из двух способов, показанных ниже:
docRoot.equipmentId = _eqp["id"].ToString();
docRoot.equipmentId = _eqp["id"].AsString;