You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:07:50