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

C# 创建接受所有键值对的数据模型,c#,web-services,asp.net-web-api,swagger,data-modeling,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; } } 如果

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

    [HttpPost]
    public void Post([FromBody]UserProfile value)
    {
       ...
    }
这就是我的UserProfile类的外观:

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

    public string Email { get; set; }
}
如果客户端发送一个如下所示的post请求,我希望能够对额外字段进行反序列化。有没有一种方法可以在数据模型中动态创建这些字段

{
    "userId": "a123",
    "email": "foo@bar.com",
    "firstName": "John",
    "lastName": "Doe",
    "...": "..."
}
我希望能够接受(至少)用户ID和电子邮件,但如果用户向我发送更多数据,我也希望接受,以便将其存储到NoSQL数据库中

我可能只需要将我的对象从UserProfile更改为Dictionary,但我希望我的swagger文档显示UserId和电子邮件

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

{
    "userId": "a123",
    "email": "foo@bar.com",
    "firstName": "John",
    "lastName": "Doe",
    "...": "..."
}
我能想到的一个解决方案是接受一个字典,它可以容纳任意数量的键值对,如下所示:

[HttpPost]
public void Post([FromBody]IDictionary<string, string> pairs)
{
   ...
}
[HttpPost]
公共无效Post([FromBody]IDictionary对)
{
...
}
您可以从字典中获取
UserId
Email
,如果有更多项目,您也可以处理这些项目

您可以做的另一件事是尝试和思考对象可以拥有的所有可能属性,并将其中大部分属性设置为可选,然后在控制器中,检查它们是否具有值并对其进行处理