在请求正文中,我有一个名为systemDate
的属性。在我的模型中,此属性始终设置为0
,我认为这是由于变量类型(long
,double
等)引起的,但是在我将名称从{{1}更改后}到请求正文中的systemDate
以及模型类中的someDate
到SystemDate
中,该值按照预期的那样从请求正文传递到模型实例。
为什么会发生这种情况,有没有办法保持请求json的命名并将其值传递给模型?
SomeDate
这是我的模型类的样子:
{
"category":"some_category",
"level":5,
"source":"some_source",
"location":"some_location",
"date":2793455394017,
"message":"some_message",
"id":3295830,
"systemDate":1533114073596991534
}
以及Controller方法:
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; }
}
答案 0 :(得分:1)
我不确定是否理解您的问题,但是您可以使用属性控制序列化,即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
属性被映射为与json字符串中的systemDate
属性匹配。
答案 1 :(得分:1)
对于Asp.Net Core
,我们可以通过Json Serialize Settings
中的AddJsonOptions
配置Startup
。
此问题的根本原因与NamingStrategy = new SnakeCaseNamingStrategy()
有关。