反序列化我的 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);
我的服务 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:
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);