.Net 6 `JsonPropertyName` 反序列化不起作用

问题描述 投票:0回答:2

我正在尝试使用

System.Text.Json
序列化/反序列化某些 API 响应,并且
JSON
字段与我正在使用的
C#
类并不完全相同,因此对于我尝试使用
JsonPropertyName
的实际名称但它似乎没有按预期工作。 我尝试返回 .Net 文档,并使用他们的示例之一来检查问题出在哪里,但反序列化仍然没有完成。
这是我使用的示例代码:

var json =
    @"{""dit_date"":""2020-09-06T11:31:01.923395"",""temperature_c"":-1,""sum_mary"":""Cold""} ";
Console.WriteLine($"Input JSON: {json}");

var forecast = JsonSerializer.Deserialize<Forecast>(json)!;

Console.WriteLine($"forecast.Date: {forecast.Date}");
Console.WriteLine($"forecast.TemperatureC: {forecast.TemperatureC}");
Console.WriteLine($"forecast.Summary: {forecast.Summary}");

var roundTrippedJson =
    JsonSerializer.Serialize(forecast);

Console.WriteLine($"Output JSON: {roundTrippedJson}");

Forecast
班:

public class Forecast
{
    [JsonPropertyName("dit_date")] public DateTime Date;
    [JsonPropertyName("temperature_c")] public int TemperatureC;
    [JsonPropertyName("sum_mary")] public string? Summary;
}

我得到的输出:

Input JSON: {"dit_date":"2020-09-06T11:31:01.923395","temperature_c":-1,"sum_mary":"Cold"} 
forecast.Date: 01/01/0001 00:00:00
forecast.TemperatureC: 0
forecast.Summary: 
Output JSON: {}

知道这有什么问题吗?

c# json .net-core deserialization system.text.json
2个回答
3
投票

类成员应该是属性,而不是字段:

public class Forecast
{
    [JsonPropertyName("dit_date")] 
    public DateTime Date { get; set; }

    [JsonPropertyName("temperature_c")] 
    public int TemperatureC { get; set; }

    [JsonPropertyName("sum_mary")] 
    public string? Summary { get; set; }
}

0
投票

添加信息,这也与您正在使用的相关。

  1. 如果您使用 Newtonsoft.Json,则正确使用的属性是 [JsonProperty] 而不是 [JsonPropertyName]
  2. 如果您使用 System.Text.Json,则 [JsonPropertyName] 是 正确。

这可能对实施了已接受的解决方案但未发现该解决方案有效的其他人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.