Удалить ObjectId из документа mongodb, сериализованного в JSON in C# - PullRequest
1 голос
/ 17 февраля 2020

У меня тут небольшая проблема. Я получаю все свои продукты из коллекции mongodb с помощью этой функции:

public async Task<string> getAllProducts()
        {
            List<string> all = new List<string>();

            var document = await getCollection("produits").Find(new BsonDocument()).ToCursorAsync();
            foreach (var doc in document.ToEnumerable())
            {
                var res = doc.ToJson();
                all.Add(res);
            }
            return JsonConvert.SerializeObject(all);
        }

, и она возвращает JSON, который выглядит следующим образом, для моей реакции переднего конца.

{ "_id" : ObjectId("5e49bdf5f040e808847a17d7"), 
"email" : "example@gmail.com", 
"quantite" : 1, 
"matricule" : 1}

проблема это я не могу разобрать это в моем javascript из-за этого: ObjectId ("5e49bdf5f040e808847a17d7")

Конечно, я мог бы сделать некоторые строки волхвов c, прежде чем я его проанализирую, но id скорее это будет исправлено на стороне сервера. Так есть ли способ, которым я могу избавиться от этой проблемы и получить такой результат?

{ "_id" : "5e49bdf5f040e808847a17d7", 
    "email" : "example@gmail.com", 
    "quantite" : 1, 
    "matricule" : 1}

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

попробуй. он будет сериализовать строковые идентификаторы без объективных вещей.

    public static async Task<string> getAllProducts()
    {
        var collection = db.GetCollection<object>("produits");

        var all = new List<object>();

        using (var cursor = await collection.FindAsync("{}"))
        {
            while (await cursor.MoveNextAsync())
            {
                foreach (var doc in cursor.Current.ToArray())
                {
                    all.Add(doc);
                }
            }
        }

        return Newtonsoft.Json.JsonConvert.SerializeObject(all);
    }
0 голосов
/ 19 февраля 2020

Исправлено путем создания класса для объекта mongodb.

public class Product
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public int matricule { get; set; }
    public int quantite { get; set; }
    public string email { get; set; }
    public float prix { get; set; }
    public string image { get; set; }
}

получить их и десериализовать с помощью BsonSerializer:

public async Task<List<Product>> getAllProducts(){
    var collection = await getCollection("produits").Find(new BsonDocument()).ToListAsync();
    List<Product> all = new List<Product>();
    foreach(var doc in collection){
        all.Add(BsonSerializer.Deserialize<Product>(doc));
    }
    return all;
}

вернуть их по запросу:

[HttpGet]
public async Task<string> ShowProductsAsync()
{
    MongodbModel model = new MongodbModel();
    var products = await model.getAllProducts();
    Console.WriteLine(products);
    return JsonConvert.SerializeObject(products);
}
...