sql >> データベース >  >> NoSQL >> MongoDB

C#MongoDB複合クラスのシリアル化

    ここでデータをMongoDBに保存する方法を見つけました:_tフィールドを省略した辞書からBsonDocumentへの変換 少し拡張したので、完全なソリューションを共有しようと思いました。

    ステップ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

    PostのWebAPIコントローラーメソッドで

    [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. MongoDBコレクションからSwingJTableにデータを取得します

    2. mongoengineを使用してmongodbにマルチドキュメントを挿入

    3. 並べ替えられたデータで個別の値を取得する

    4. サンプルコードを使用したmongocxxc++ドライバーのテスト