sql >> Databasteknik >  >> NoSQL >> MongoDB

C# MongoDB komplex klass serialisering

Hittade hur du sparar data till MongoDB här:Dictionary-to-BsonDocument-konvertering som utelämnar _t-fältet och utökade det lite så jag tänkte dela med mig av hela lösningen.

Steg #1:

I min klass deklarerade jag 2 medlemmar för varje värde:

// 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; }

Steg #2

I min WebAPI-kontrollermetod för 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
}

Steg #3

I min Get begär att jag deserialiserar det tillbaka så här:

[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);
}

Detta löste mitt problem och jag hoppas att det kan hjälpa andra också :-)



  1. npm installera -g mongodb installerar inte mongodb globalt på OSX 10.8.4?

  2. MongoDB:Miljarder dokument i en samling

  3. Cacha MongoDB-anslutningar i Django

  4. Uppdatera ett MongoDB-underdokument när det överordnade dokumentet kanske inte finns