Xamarin 表单反序列化 Json 不工作

Posted

技术标签:

【中文标题】Xamarin 表单反序列化 Json 不工作【英文标题】:Xamarin Forms Deserialise Json Not Working 【发布时间】:2020-11-20 00:43:50 【问题描述】:

我在反序列化 json 包时遇到问题。

我尝试在线复制示例,但即使代码执行良好,似乎也无法提取总价格。

我只是想在这里从我的 json 包中提取总价:

"rates":["service_name":"FastDelivery","service_code":"FD","total_price":7.150],"success":true

这是我的代码:

Rate response_variables = JsonConvert.DeserializeObject<Rate>(response_package);

var response_field = response_variables.total_price;

Console.WriteLine("Shipping Price:");

Console.WriteLine(response_field);

还有我的公开课率

public class Rate
        
            public string service_name  get; set; 
            public string service_code  get; set; 
            public double total_price  get; set; 

        

我错过了什么吗?还是有其他方法可以提取 total_price?

【问题讨论】:

您的类结构与 json 不匹配。复制 json,在 Visual Studio 中打开一个新文件,转到 Edit > Paste special > Paste json as classes。然后,根据需要更改类型名称。 【参考方案1】:

就像 Crowcoder 所说,您要反序列化的类不是“Rate”对象,它是一个包含 Rate 对象列表和布尔值的类。

我建议您在https://json2csharp.com/ 中检查您需要用于 JSON 的模型。

在这种情况下,您尝试读取的 JSON 反序列化为:

public class Rate    
    public string service_name  get; set;  
    public string service_code  get; set;  
    public double total_price  get; set;  



public class Root    
    public List<Rate> rates  get; set;  
    public bool success  get; set;  


而“Root”是要包含您尝试读取的元素的类。

要提取总价格,您必须通过循环访问每个 Rate:

Root response_variables = JsonConvert.DeserializeObject<Root> (response_package);
foreach(var rate in response_variables.rates)
var price = rate.total_price;
//Do stuff

【讨论】:

非常感谢奥斯卡,非常感谢!现在开始工作了! :)

以上是关于Xamarin 表单反序列化 Json 不工作的主要内容,如果未能解决你的问题,请参考以下文章

C#反序列化Json字符串

JsonConvert 无法反序列化整数

无法反序列化当前 JSON 对象 xamarin.forms

C#反序化json字符串,不用区分大小写

无法反序列化当前 JSON 对象,xamarin.forms 中的错误

从api逻辑任务和反序列化对象并反序列化json