sql >> Database >  >> NoSQL >> MongoDB

C# MongoDB complexe klasse-serialisatie

Gevonden hoe u de gegevens op MongoDB kunt opslaan:Woordenboek-naar-BsonDocument-conversie zonder _t-veld en verlengde het een beetje, dus ik dacht de volledige oplossing te delen.

Stap #1:

In mijn klas heb ik voor elke waarde 2 leden aangegeven:

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

Stap #2

In mijn WebAPI-controllermethode voor 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
}

Stap #3

In mijn Get verzoek ik deserialiseer het terug als volgt:

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

Dit loste mijn probleem op en ik hoop dat het anderen ook kan helpen :-)



  1. CSV-bestand MongoDB importeren met ISODate

  2. Mongo-updatesnelheid

  3. ongeldige bytereeks in US-ASCII (Ruby 1.9 + rails 2.3.8 + mongodb + mongo_mapper)

  4. Hoe een item (Point, LineString, Polygon) binnen een selectiekader in mongodb te krijgen