【问题标题】:Creating a data model that accepts all key value pairs创建一个接受所有键值对的数据模型
【发布时间】:2017-10-08 11:56:21
【问题描述】:

我有一个 Web API 控制器,其中包含如下的 post 命令:

    [HttpPost]
    public void Post([FromBody]UserProfile value)
    {
       ...
    }

这就是我的 UserProfile 类的样子:

public class UserProfile
{
    public string UserId { get; set; }

    public string Email { get; set; }
}

如果客户端发送如下所示的发布请求,我希望能够反序列化额外的字段。有没有办法在我的数据模型中动态创建这些字段?

{
    "userId": "a123",
    "email": "foo@bar.com",
    "firstName": "John",
    "lastName": "Doe",
    "...": "..."
}

我希望能够接受(至少)用户 ID 和电子邮件,但如果用户向我发送更多数据,我也愿意接受,以便将其存储到 NoSQL 数据库中。

我可能只是将我的对象从 UserProfile 更改为 Dictionary,但我希望我的招摇文档显示 UserId 和 Email。

【问题讨论】:

    标签: c# web-services asp.net-web-api swagger data-modeling


    【解决方案1】:

    有没有一种方法可以在我的数据模型中动态创建这些字段?

    我能想到的一个解决方案是接受一个字典,它可以容纳任意数量的键值对,如下所示:

    [HttpPost]
    public void Post([FromBody]IDictionary<string, string> pairs)
    {
       ...
    }
    

    您可以从字典中获取UserIdEmail,如果有更多项目,您也可以处理它们。

    您可以做的另一件事是尝试考虑对象可以具有的所有可能属性,并将它们中的大多数设为可选,然后在您的控制器中检查它们是否具有值并处理它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-31
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      相关资源
      最近更新 更多