Xamarin Forms JSON反序列化问题:无法提取total_price值
问题分析与解决方案
你的问题核心在于JSON结构和你的类定义不匹配,导致反序列化后无法正确获取total_price值。我们一步步拆解解决:
1. 先理清JSON的结构
你提供的JSON顶层是一个包含两个字段的对象:
{"rates":[{"service_name":"FastDelivery","service_code":"FD","total_price":7.150}],"success":true}
rates是一个数组,里面才是单个Rate类型的对象success是一个布尔值
而你直接把整个JSON反序列化成Rate类,相当于告诉序列化器"整个JSON就是一个Rate对象",但实际结构完全不符,自然拿不到目标值。
2. 修正类结构
你需要先定义一个根类来匹配JSON的顶层结构,再保留原来的Rate类:
// 根类,对应JSON的顶层结构 public class RateResponse { public List<Rate> rates { get; set; } public bool success { get; set; } } // 原来的Rate类不变,对应数组里的单个元素 public class Rate { public string service_name { get; set; } public string service_code { get; set; } public double total_price { get; set; } }
3. 修改反序列化代码
现在用根类来反序列化,再从rates数组中提取第一个元素的total_price(记得加空值判断避免异常):
RateResponse response = JsonConvert.DeserializeObject<RateResponse>(response_package); if (response?.rates != null && response.rates.Any()) { var shippingPrice = response.rates[0].total_price; Console.WriteLine("Shipping Price:"); Console.WriteLine(shippingPrice); } else { Console.WriteLine("No valid shipping rates found."); }
4. 另一种快速提取的方法(无需额外定义类)
如果你不想创建根类,也可以用JObject直接解析JSON:
JObject jsonObj = JObject.Parse(response_package); var totalPrice = jsonObj["rates"][0]["total_price"].Value<double>(); Console.WriteLine("Shipping Price:"); Console.WriteLine(totalPrice);
这样就能正确提取到7.150这个值啦!
内容的提问来源于stack exchange,提问作者Khoa
相关产品推荐
相关产品推荐

