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

Web API + MongoDB: list of arbitrary objects?

我有一个 .Net Core 2.0 Web API,我在其中使用 MongoDB .net 驱动程序。

我有一个 class 叫 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" : []
                }
            }
        }
    ]
}

我知道如果我使用指定类型的列表,例如 class 或结构,它会起作用,但我需要列表是一个动态对象,因为我不知道客户端是哪些对象可以发。

数据库中保存的数据需要做些什么才能可读?

使用Dictionary<string, object>表示未知结构的数据。

这既适用于 Newtonsoft.Json,它是 ASP.NET Web API 中的默认序列化程序,也适用于 MongoDB.Driver.

的 BSON 序列化程序

ListOfValuesclass改成如下:

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 returned/received 中。

测试

  • ASP.NET 核心 2.0 网络 API
  • Newtonsoft.Json 10.0.3
  • MongoDB.Driver2.4.4
  • MongoDB 服务器 3.4 w/WiredTiger