【问题标题】:Deserialize my JSOn and bind to list in C# UWP反序列化我的 JSOn 并绑定到 C# UWP 中的列表
【发布时间】:2016-06-22 08:06:08
【问题描述】:

我的服务返回一个如下所示的 JSON,我想解析它并将 category_name 绑定到我的列表,如何在 C#、UWP 应用程序中执行此操作。

我正在尝试以这种方式反序列化它

var content_resp = await response.Content.ReadAsStringAsync();

            content_resp = "{ \"root\": " + content_resp.Trim().TrimStart('{').TrimEnd('}') + " }";
            var xmlProducts = JsonConvert.DeserializeXNode(content_resp);

            var xmlProductNodes = xmlProducts.DescendantNodes();

            foreach (XElement xmlProduct in xmlProductNodes)
            {
                Places pl = new Places();
                var node = xmlProducts.Element("category_parent").Value;

                    pl.category_name = xmlProducts.Element("category_name").Value;                                                         
            }                
        }
        catch (Exception ex)
        {
            //throw or return an appropriate response/exception
        }

当调试器出现在这一行时

var xmlProducts = JsonConvert.DeserializeXNode(content_resp);

它给出了一个错误,比如 “此操作会创建结构不正确的文档。”

【问题讨论】:

  • 您在这里将 JSON 转换为 Xml 结构是否有原因?

标签: c# json parsing uwp json-deserialization


【解决方案1】:

我发现最简单的方法是使用 Newtonsoft.Json
首先,您应该创建数据等于您的 JSON 的类:

public class AppsData
{
    private string _category_id;
    private string _category_name;

    public string category_id
    {
        get { return _category_id; }
        set { _category_id = value; }
    }

    public string category_name
    {
        get { return _category_name; }
        set { _category_name = value; }
    }
}

然后你可以创建一些帮助类:

    static class JSONhelper
{

    public static IList<T> DeserializeToList<T>(string jsonString)
    {
        var array = Newtonsoft.Json.Linq.JArray.Parse(jsonString);

        IList<T> objectsList = new List<T>();

        foreach (var item in array)
        {
            try
            {
                objectsList.Add(item.ToObject<T>());       
            }
            catch { }    
        }
        return objectsList;
    }
}

然后创建 List 的实例

IList<AppsData> appsdata;

并尝试反序列化:

 appsdata = JSONhelper.DeserializeToList<AppsData>(stringWithJSON);

【讨论】:

    【解决方案2】:

    如果没有理由反序列化为 XML,您可以执行以下操作:

    创建要解析的类

    public class Product
    {
        public string category_id { get; set; }
        [JsonProperty("0")]
        public string Zero { get; set; }
        public string category_name { get; set; }
        [JsonProperty("1")]
        public string One { get; set; }
        public string category_details { get; set; }
        [JsonProperty("2")]
        public string Two { get; set; }
        public string category_link { get; set; }
        [JsonProperty("3")]
        public string Three { get; set; }
    }
    

    然后

    var products = JsonConvert.DeserializeObject<IList<Product>>(your json);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多