[英]Web API + MongoDB: list of arbitrary objects?
我有一個.Net Core 2.0 Web API,其中使用了MongoDB .net驅動程序。
我有一個叫做ListOfValues
的類:
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 });
}
}
我正在發布此數據:
{
"listName": "test",
"MetaData": [{
"Name": "Text",
"FieldType": "TextBox",
"isActive": 1
}]
}
出於某種原因,當我查詢數據庫時,我看到此值:
{
"_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" : []
}
}
}
]
}
我知道,如果我使用指定類型的列表(例如類或結構),它將起作用,但是我需要將該列表作為動態對象,因為我不知道客戶端可以發送哪些對象。
為了使數據庫中保存的數據可讀,我需要怎么做?
使用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
屬性。 使用JsonIgnore
屬性,它將不會出現在控制器返回/接收的JSON中。
經過測試 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.