簡體   English   中英

Web API + MongoDB:任意對象列表?

[英]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中。

經過測試

  • ASP.NET Core 2.0 Web API
  • Newtonsoft.Json 10.0.3
  • MongoDB.Driver 2.4.4
  • 帶WiredTiger的MongoDB服務器3.4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM