我已经使用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个计数。有人能为我解释一下吗?这将是一个巨大的帮助。
1条答案
按热度按时间rekjcdws1#
发布图片而不是文本总是一个坏主意,所以我甚至看不出有什么问题,但我可以看到你必须添加PropertyNameCaseInsensitive,因为你的类属性名和json属性名不同。