由于系统命名而从JSON主体映射到模型问题

时间:2018-08-01 12:25:43

标签: c# asp.net-core-webapi

在请求正文中,我有一个名为systemDate的属性。在我的模型中,此属性始终设置为0,我认为这是由于变量类型(longdouble等)引起的,但是在我将名称从{{1}更改后}到请求正文中的systemDate以及模型类中的someDateSystemDate中,该值按照预期的那样从请求正文传递到模型实例。

为什么会发生这种情况,有没有办法保持请求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; }
}

2 个答案:

答案 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()有关。