json .NET MAUI反序列化以从测试API列出视图模型

b5lpy0ml  于 2023-02-17  发布在  .NET
关注(0)|答案(1)|浏览(134)

我已经使用Xamarin表单有一段时间了,但我希望开始使用.NET MAUI,当将响应从我的测试API反序列化到ViewModel列表时,我遇到了一个问题,它返回了列表计数,但没有绑定ViewModel中的变量(如果有意义的话)。
我使用的是Newtonsoft,它工作得很完美,但现在我在6.0上,我不相信他们支持它,所以我使用System.Text.Json库代替。
有效的代码是:

var response = client.GetAsync("WeatherForecast?format=json").Result
if(response.IsSuccessStatusCode)
{
  var result = JsonConvert.DeserializeObject<List<WeatherViewModel>>(response.Content.ReadAsStringAsync().Result);
}

但现在当我用途:

var response = client.GetAsync("WeatherForecast?format=json").Result;
if (response.IsSuccessStatusCode)
{
   var options = new JsonSerializerOptions { WriteIndented = true };
   var responseData = JsonSerializer.Deserialize<List<WeatherViewModel>>(response.Content.ReadAsStringAsync().Result, options);
}

它在调试器中给出了

但在实际的响应. Content.ReadAsStringAsync中,结果如下:

ViewModel的结构如下所示:

public class WeatherViewModel
{
  public DateTime Date { get; set; }

  public Int32 TemperatureC { get; set; }

  public Int32 TemperatureF => 32 + (int)(TemperatureC / 0.5556);

  public String Summary { get; set; }
}

下面是它从调用中返回的JSON:

[
{
"date": "2023-02-15T18:42:26.4694349+00:00",
"temperatureC": 39,
"temperatureF": 102,
"summary": "Hot"
},
{
"date": "2023-02-16T18:42:26.4694515+00:00",
"temperatureC": -3,
"temperatureF": 27,
"summary": "Cool"
},
{
"date": "2023-02-17T18:42:26.4694523+00:00",
"temperatureC": -9,
"temperatureF": 16,
"summary": "Bracing"
},
{
"date": "2023-02-18T18:42:26.469453+00:00",
"temperatureC": 9,
"temperatureF": 48,
"summary": "Cool"
},
{
"date": "2023-02-19T18:42:26.4694537+00:00",
"temperatureC": 5,
"temperatureF": 40,
"summary": "Chilly"
}
]

所以我遇到的问题是,我从API Get中获取JSON ok,但当我反序列化它时,它没有填充到ViewModel中,而是在列表中创建了5个计数。有人能为我解释一下吗?这将是一个巨大的帮助。

rekjcdws

rekjcdws1#

发布图片而不是文本总是一个坏主意,所以我甚至看不出有什么问题,但我可以看到你必须添加PropertyNameCaseInsensitive,因为你的类属性名和json属性名不同。

var options = new JsonSerializerOptions { WriteIndented = true, PropertyNameCaseInsensitive = true};

JsonSerializer.Deserialize<...>(json, options)

相关问题