Problem
I have a dynamic dataset. I want to return it like this:
{
_id: "58b454f20960a1788ef48ebb"
...
}
Attempts
Here is a list of approaches that do not work:
it
await resources = _database.GetCollection<BsonDocument>("resources")
.Find(Builders<BsonDocument>.Filter.Empty)
.ToListAsync();
return Ok(resources);
Productivity
[[{"name":"_id","value":{"bsonType":7,"timestamp":1488213234,"machine":614561,"pid":30862,"increment":16027323,"creationTime":"2017-02-27T16:33:54Z","rawValue":{"timestamp":1488213234,"machine":614561,"pid":30862,"increment":16027323,"creationTime":"2017-02-27T16:33:54Z"},"value":{"timestamp":1488213234,"machine":614561,"pid":30862,"increment":16027323,"creationTime":"2017-02-27T16:33:54Z"}}}]]
it
await resources = _database.GetCollection<BsonDocument>("resources")
.Find(Builders<BsonDocument>.Filter.Empty)
.ToListAsync();
return Ok(resources.ToJson());
Productivity
[{ "_id" : ObjectId("58b454f20960a1788ef48ebb"), ... }]
it
await resources = _database.GetCollection<BsonDocument>("resources")
.Find(Builders<BsonDocument>.Filter.Empty)
.ToListAsync();
return Ok(resources.ToJson(new JsonWriterSettings() { OutputMode = JsonOutputMode.Strict }));
Productivity
[{ "_id" : { "$oid" : "58b454f20960a1788ef48ebb" }, ... }]
it
await resources = _database.GetCollection<BsonDocument>("resources")
.Find(Builders<BsonDocument>.Filter.Empty)
.ToListAsync();
return Ok(Newtonsoft.Json.JsonConvert.SerializeObject(resources));
Productivity
"Newtonsoft.Json.JsonSerializationException: error retrieving value from" AsBoolean "in" MongoDB.Bson.BsonObjectId ". ---> System.InvalidCastException: cannot throw object of type 'MongoDB.Bson.BsonObjectId' to enter 'MongoDB.Bson.BsonBoolean ''
And changing BsonDocumentto dynamicgives the same results.
docs. , , ObjectId , - . , , .
_client = new MongoClient(clientSettings);
_database = _client.GetDatabase(_settings.DatabaseName);
BsonSerializer.RegisterSerializer(new ObjectIdSerializer());
...
class ObjectIdSerializer : SerializerBase<ObjectId>
{
public override ObjectId Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return context.Reader.ReadObjectId();
}
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, ObjectId value)
{
context.Writer.WriteString(value.ToString());
}
}
.