【问题标题】:How do you get the selling_price? (Xamarin Forms)你如何获得销售价格? (Xamarin 形式)
【发布时间】:2017-06-20 18:02:51
【问题描述】:

这是我的代码:

dynamic resultObject = JsonConvert.DeserializeObject(Result);
string final = JsonConvert.SerializeObject(resultObject);

这是我的最终结果(JSON):

如何获得 sell_price 字段?喜欢做 final. sell_price 吗?

我的班级:

public class ItemPriceJson {
        public string item_price_id { get; set; }
        public string item_code { get; set; }
        public string item_desc { get; set; }
        public string trnx_unit { get; set; }
        public string price_level_id { get; set; }
        public string price_level_code { get; set; }
        public string selling_price { get; set; }
    } // itemPriceJson

【问题讨论】:

  • 您可以针对 json 响应创建一个模型类。它为您创建 POCO
  • 粘贴文本而不是文本截图
  • 即使有一个类,它仍然无法在这里工作。
  • 反序列化一个json只是为了再次序列化它的原因是什么?
  • 你注意到你的 json 是一个 array 了吗?如果您对其进行反序列化,则必须将其反序列化为 List 之类的集合

标签: c# json


【解决方案1】:

您没有正确地将 json 反序列化为动态对象。首先,它是一个数组,而不是一个对象。

所以,试试这样:

dynamic resultObject = JArray.Parse(Result); //Dynamic object.
var sellingPrice = resultObject[0].selling_price; //Get the selling price. Could also use some casting here.

【讨论】:

  • 为什么不JsonConvert.DeserializeObject<List<ItemPriceJson>>( Result )
  • 我写这篇文章时OP没有指定他的类代码。
【解决方案2】:

你应该把你的班级改成

public class ItemPriceJson {
    public int item_price_id { get; set; }
    public string item_code { get; set; }
    public string item_desc { get; set; }
    public string trnx_unit { get; set; }
    public int price_level_id { get; set; }
    public string price_level_code { get; set; }
    public int selling_price { get; set; }
} // itemPriceJson

并使用反序列化

var results = JsonConvert.DeserializeObject<List<ItemPriceJson>>( Result );

因为 json 结果包含一个对象数组,所以你需要一个用于反序列化的集合

【讨论】:

    【解决方案3】:

    例如创建一个描述对象的 POCO 类;

    public class MyItemObject
    {
        public string item_price_id { get; set; }
        public string item_desc { get; set; }
        public string trnx_unit { get; set; }
    }
    

    然后使用 JsonConvert 反序列化对象的一个​​实例。

    var result = JsonConvert.DeserializeObject<MyItemObject>(json);
    

    编辑

    由于 json 是一个列表/集合,反序列化为一个列表类型;

    var listResult = JsonConvert.DeserializeObject<List<MyItemObject>>(json);
    

    【讨论】:

    • 不,json 包含一个数组/集合
    【解决方案4】:
    public class ItemPriceJson {
        public string item_price_id { get; set; }
        public string item_code { get; set; }
        public string item_desc { get; set; }
        public string trnx_unit { get; set; }
        public string price_level_id { get; set; }
        public string price_level_code { get; set; }
        public string selling_price { get; set; }
    } 
    

    你可以使用 Newtonsoft json 库

    var result = JsonConvert.DeserializeObject<List<ItemPriceJson>>(jsonstring);
    

    【讨论】:

    • 没有。它是一个数组。
    • 好的,那么我们可以使用 JsonConvert.DeserializeObject>(jsonstring);
    • 您不能调用result.selling_price,因为List&lt;&gt; 没有名为selling_price 的属性/字段。
    • 哦,搞错了,之前我是把json对象转成POCO,然后就是JSON数组,所以才这样。
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    相关资源
    最近更新 更多