反序列化我的 JSOn 并绑定到 C# UWP 中的列表

Deserialize my JSOn and bind to list in C# UWP

我的服务 returns 一个 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);

它给出了这样的错误 "This operation would create an incorrectly structured document."

我找到的最简单的方法是使用 Newtonsoft.Json
首先,您应该使用等于 JSON:

的数据创建 class
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; }
    }
}

然后你可以创建一些助手class:

    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;
    }
}

然后创建列表实例

IList<AppsData> appsdata;

并尝试反序列化:

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

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

创建要解析的class

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);