MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

C# MongoDB сложна сериализация на класове

Намерете как да запазите данните в MongoDB тук:Преобразуване от речник към BsonDocument без _t поле и го разширих малко, така че реших да споделя пълното решение.

Стъпка №1:

В моя клас декларирах 2 члена за всяка стойност:

// For the Hobbies object type:
[BsonIgnore] //ignore this value in MongoDB
public Dictionary<string, object> Hobbies { get; set; }

[JsonIgnore] //ignore this value in the response on Get requests
[BsonElement(elementName: "Hobbies")]
public BsonDocument HobbiesBson { get; set; }

/*********************************************************************/

// For the Collection object type:
[BsonIgnore] //ignore this value in MongoDB
public List<Dictionary<string, object>> Collection { get; set; }

[JsonIgnore] //ignore this value in the response on Get requests
[BsonElement(elementName: "Collection")]
public BsonArray CollectionBson { get; set; }

Стъпка №2

В моя метод на WebAPI контролер за Post

[HttpPost]
public override async Task<IActionResult> Post([FromBody] Person person)
{
    var jsonDoc = JsonConvert.SerializeObject(person.Hobbies);
    person.HobbiesBson = BsonSerializer.Deserialize<BsonDocument>(jsonDoc);

    jsonDoc = JsonConvert.SerializeObject(person.Collection);
    person.CollectionBson = BsonSerializer.Deserialize<BsonArray>(jsonDoc);

    //save
}

Стъпка #3

В моя Get поискам да го десериализирам обратно по този начин:

[HttpGet("{id?}")]
public override async Task<IActionResult> Get(string id = null)
{
    var people = //get data from mongoDB
    foreach (var person in people)
    {
        var bsonDoc = BsonExtensionMethods.ToJson(person.HobbiesBson);
        person.Hobbies = JsonConvert.DeserializeObject<Dictionary<string, object>>(bsonDoc);

        bsonDoc = BsonExtensionMethods.ToJson(person.CollectionBson);
        person.Collection = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(bsonDoc);bsonDoc);
    }
    return Ok(people);
}

Това реши моя проблем и се надявам, че може да помогне и на други :-)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb извлича обект от масив, който не работи с помощта на mongoose

  2. Заявка за преобразуване на масив в карта на документи с n атрибута

  3. MongoCommandException:Командата е неуспешна с грешка 8000 (AtlasError):„не е изпратено SNI име, уверете се, че използвате драйвер/обвивка MongoDB 3.4+.“

  4. MongoDB C# драйвер 2.0 InsertManyAsync срещу BulkWriteAsync

  5. spring boot + mongodb + проблем с връзката с камилски маршрут