2017-11-21 10 views
0

私はMongoDB .netドライバを使用している.Net Core 2.0 Web APIを持っています。Web API + MongoDB:任意のオブジェクトのリスト?

私はListOfValuesというクラスがあります、

{ 
    "listName": "test", 
    "MetaData": [{ 
     "Name": "Text", 
     "FieldType": "TextBox", 
     "isActive": 1 
    }] 
} 

をいくつかの理由:

public class ListOfValues 
{ 
    public string ListName { get; set; } 
    public List<object> MetaData { get; set; } 
} 

節約のための私のコントローラのエンドポイントは次のとおりです。

public class LovController : Controller 
{ 
    [HttpPost] 
    public async Task<IActionResult> Create([FromBody] ListOfValues lov) 
    { 
     if (!ModelState.IsValid) 
      return BadRequest(); 

     await ldbContext.GetCollection<ListOfValues>("ListOfValues").InsertOneAsync(lov); 
     return CreatedAtAction("Create", new { Id = lov.Id }); 
    } 
} 

私はこのデータを掲載していますが私はDBに照会するとき、私はこの値を参照してください:

{ 
    "_id" : ObjectId("5a1421e644d7cb07a8d3c45d"), 
    "ListName" : "test", 
    "MetaData" : [ 
     { 
      "_t" : "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed", 
      "_v" : { 
       "Name" : { 
        "_t" : "JValue", 
        "_v" : [] 
       }, 
       "FieldType" : { 
        "_t" : "JValue", 
        "_v" : [] 
       }, 
       "isActive" : { 
        "_t" : "JValue", 
        "_v" : [] 
       } 
      } 
     } 
    ] 
} 

クラスや構造体などの指定された型のリストを使用すると、クライアントが送信できるオブジェクトがわからないため、動的オブジェクトにする必要があります。

DBに保存されたデータを読めるようにするには、何が必要ですか?

+0

メタデータクラスの例をC#で追加できますか?問題はNewtonsoft.Jsonに関連しています。それはMongoDBドライバとは関係ありません。 –

+0

メタデータプロパティのクラスがありません。クライアントが送信する動的なJSON配列であるはずです。私はNewtonsoft.Jsonへの参照を私のコードで持っていないので、なぜそこに現れるのかわかりません。 –

+0

ありがとうございます。だから、DBのデータをリクエストと同じように見せたいのですが、そうですか? –

答えて

2

未知の構造のデータを表すのにDictionary<string, object>を使用してください。

これは、ASP.NET Web APIのデフォルトシリアライザであるNewtonsoft.Jsonと、MongoDB.DriverのBSONシリアライザの両方で機能します。

変更ListOfValuesクラスは、次のように

public class ListOfValues 
{ 
    [JsonIgnore] 
    public ObjectId Id { get; set; } 

    public string ListName { get; set; } 

    public List<Dictionary<string,object>> MetaData { get; set; } 
} 

IdプロパティはDBからデータをフェッチするために必要とされます。 JsonIgnore属性では、コントローラーが返す/受信したJSONには存在しません。 WiredTiger/wの

  • ASP.NETコア2.0のWeb API
  • Newtonsoft.Json 10.0.3
  • MongoDB.Driver 2.4.4
  • のMongoDBサーバ3.4:でテスト

+0

とてもシンプルでわかりやすく、私はそれを見逃してしまった。しかし、私はMongoDB C#ドライバ - [CSharpドライバでドキュメントをシリアライズする](https://mongodb-documentation.readthedocs)を使って作業することについて知っておくべき興味深い資料を網羅した、MongoDBマニュアルの非常に有用なリンクを発見しました。 .io/en/latest/ecosystem/tutorial/serialize-documents-with-the-csharp-driver.html) –