创建接受所有键值对的数据模型

时间:2017-05-10 01:31:47

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

我有一个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",
    "...": "..."
}

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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

您可以从字典中获取UserIdEmail,如果有更多项目,那么您也可以处理这些项目。

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