2013-11-21 2 views
0

Я не понимаю, как я могу правильно выводить идентификатор при отображении объектов. Это либо ObjectId(), что я не могу разобрать обратно объект или какой-либо объект, в котором есть идентификатор, который я могу проанализировать, но это выглядит странно.C# MongoDb - Поле вывода идентификатора правильно?

Обратите внимание, что сопоставление его с классом не является вариантом, оно должно быть полностью динамическим, поскольку разные пользователи имеют разные поля.

Код

public List<object> Get() 
{ 
    var client = new MongoClient("mongodb://localhost"); 
    var server = client.GetServer(); 
    var database = server.GetDatabase("api_test"); 
    var collection = database.GetCollection("users"); 

    var json = collection.FindAllAs<BsonDocument>().ToJson(new JsonWriterSettings { OutputMode = JsonOutputMode.Strict }); 
    var obj = JsonConvert.DeserializeObject<List<object>>(json); 

    return obj; 
} 

Пример

[ 
    { 
     "_id": { 
      "$oid": "528e7f9bb1fece903aa9b246" 
     }, 
     "Name": "Steve", 
     "Age": 60 
    }, 
    { 
     "_id": { 
      "$oid": "528e7fabb1fece903aa9b247" 
     }, 
     "Name": "Alice", 
     "Age": 44 
    } 
] 

То, что я хотел бы

[ 
    { 
     "_id": "528e7f9bb1fece903aa9b246", 
     "Name": "Steve", 
     "Age": 60 
    }, 
    { 
     "_id": "528e7fabb1fece903aa9b247", 
     "Name": "Alice", 
     "Age": 44 
    } 
] 

ответ

0

Вы можете сделать это явно обн при ответе на результат запроса для преобразования _id в строку перед ее сериализацией в JSON:

var docs = test.FindAll().ToList(); 
foreach (var doc in docs) 
{ 
    doc["_id"] = doc["_id"].ToString(); 
} 
var json = docs.ToJson(
    new JsonWriterSettings { OutputMode = JsonOutputMode.Strict }); 
Смежные вопросы