c# - 由于系统命名,从 JSON 主体映射到模型问题
问题描述
在请求正文中,我有一个名为systemDate
. 此属性始终0
在我的模型中设置为,我认为这是因为变量类型(long
,double
等),但是在我将请求正文中的名称从systemDate
to更改为模型类中的to之后,值是从请求传递的body 到模型实例,就像它应该是一样的。someDate
SystemDate
SomeDate
为什么会发生这种情况,有没有办法保持请求 json 命名并将其值传递给模型?
{
"category":"some_category",
"level":5,
"source":"some_source",
"location":"some_location",
"date":2793455394017,
"message":"some_message",
"id":3295830,
"systemDate":1533114073596991534
}
这是我的模型类的样子:
public class MyModel
{
public MyModel()
{
}
public string Category { get; set; }
public int Level { get; set; }
public string Source { get; set; }
public string Location { get; set; }
public double Date { get; set; }
public string Message { get; set; }
public long Id { get; set; }
public double SystemDate { get; set; }
}
和控制器方法:
[HttpPost(EndpointUrlConstants.MY_ENDPOINT)]
public async Task<IActionResult> DoSomething([FromBody] MyModel myModel)
{
// Some Code
return this.Ok();
}
解决方案
我不确定我是否理解您的问题,但是您可以使用属性控制序列化,即 json 字符串中的属性名称不必与模型中的属性名称匹配。
public class MyModel
{
public MyModel()
{
}
[JsonProperty("category")]
public string Category { get; set; }
[JsonProperty("level")]
public int Level { get; set; }
[JsonProperty("source")]
public string Source { get; set; }
[JsonProperty("location")]
public string Location { get; set; }
[JsonProperty("date")]
public double Date { get; set; }
[JsonProperty("message")]
public string Message { get; set; }
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("systemDate")]
public double SomeDate { get; set; }
}
测试代码,使用 Newtonsoft.Json nuget 包:
string json = @"{
""category"":""some_category"",
""level"":5,
""source"":""some_source"",
""location"":""some_location"",
""date"":2793455394017,
""message"":""some_message"",
""id"":3295830,
""systemDate"":1533114073596991534
}";
MyModel model = JsonConvert.DeserializeObject<MyModel>(json);
对象已正确反序列化。如您所见,SomeDate
模型中的属性被映射为匹配systemDate
json 字符串中的属性。
推荐阅读
- performance - SSD 性能参数 - 延迟与 IOPS?
- javascript - textarea.append() 在手动输入后停止工作
- java - 列出具有预定义大小或没有大小的可变参数
- android - 从一个 android 应用程序向另一个应用程序连续发送数据
- python - 通配符错误 - “无效选项”
- batch-file - 基于模式匹配的批处理文件中的舒适程序执行作为一个衬垫
- docker - Docker - 在 $PATH 中找不到可执行文件
- c++ - QT数据库模块错误
- amazon-web-services - 从 AWS Lambda 中清除 tmp 文件夹
- c# - 是否有可能只有在调试模式下编译的单行代码?