C# 创建接受所有键值对的数据模型
我有一个Web API控制器,其中包含如下post命令: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; } } 如果
[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
,如果有更多项目,您也可以处理这些项目
您可以做的另一件事是尝试和思考对象可以拥有的所有可能属性,并将其中大部分属性设置为可选,然后在控制器中,检查它们是否具有值并对其进行处理