作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试反序列化 Supreme New York JSON,但出现错误。
我使用 json2csharp.com
将 Json 转换为类。
然后我将它们全部汇总到一个叫做items
namespace SUPBOTTESTING
{
public class items
{
public string name { get; set; }
public int id { get; set; }
public string image_url { get; set; }
public string image_url_hi { get; set; }
public int price { get; set; }
public int sale_price { get; set; }
public bool new_item { get; set; }
public int position { get; set; }
public string category_name { get; set; }
public int price_euro { get; set; }
public int sale_price_euro { get; set; }
}
}
using System;
using System.Net;
using System.Web.Script.Serialization;
namespace SUPBOTTESTING
{
class Program
{
public static void Main()
{
{
string shop_json = new WebClient().DownloadString("https://www.supremenewyork.com/mobile_stock.json");
JavaScriptSerializer shop_object = new JavaScriptSerializer();
items[] shirt_stock = shop_object.Deserialize<items[]>(shop_json);
Console.WriteLine(shirt_stock[1]);
}
}
}
}
我收到错误:
Default constructor not found for type SUPBOTTESTING.items[]
最佳答案
好的,这是解决方案。您的想法是正确的,但您需要了解 Json 数据的结构。
您正在将其反序列化
为Object
数组,而返回的 Json 数据本身不是数组或列表。它包含作为数组的子节点,因此您需要相应地构造您的 Object
以获得成功的数据分解。
在这里,我使用 Newtonsoft
将 Json 数据反序列化为对象。
我已经测试了代码,它返回了一个 Shirts
列表
static void Main(string[] args)
{
var shop_json = new WebClient().DownloadString("https://www.supremenewyork.com/mobile_stock.json");
var shirt_stock = JsonConvert.DeserializeObject<StockObject>(shop_json);
// Picking shirts to demonstrate how to display values for all shirts
var shirts = shirt_stock.products_and_categories.Shirts;
foreach (var shirt in shirts)
{
var shirtBuilder = new StringBuilder();
shirtBuilder.AppendLine($"Name: {shirt.name}");
shirtBuilder.AppendLine($"ID: {shirt.id.ToString()}");
shirtBuilder.AppendLine($"New Item: {shirt.new_item.ToString()}");
shirtBuilder.AppendLine($"Category Name: {shirt.category_name}");
Console.WriteLine(shirtBuilder);
}
}
public class StockObject
{
public ProductsCats Products_and_categories { get; set; }
}
public class ProductsCats
{
public Details[] Shirts { get; set; }
public Details[] Bags { get; set; }
public Details[] Accessories { get; set; }
public Details[] Pants { get; set; }
public Details[] Jackets { get; set; }
public Details[] Skates { get; set; }
public Details[] Hats { get; set;}
public Details[] Sweatshirts { get; set;}
[JsonProperty("Tops/Sweaters")]
public Details[] TopsSweaters { get;set;}
public Details[] New { get; set; }
}
public class Details
{
public string name { get; set; }
public int id { get; set; }
public string image_url { get; set; }
public string image_url_hi { get; set; }
public int price { get; set; }
public int sale_price { get; set; }
public bool new_item { get; set; }
public int position { get; set; }
public string category_name { get; set; }
public int price_euro { get; set; }
public int sale_price_euro { get; set; }
}
你看到我在这里做了什么吗?
那么您的 Json 数据包含一个父节点 products_and_categories
,其子节点包含一个 Shirts
数组,这就是您想要的?
StockObject
类包含名为 Products_and_categories
的 Parent
属性,类型为 ProductsCats
。
ProductsCats
对象包含 Details
类型的属性 Shirts
,它是一个数组,将在反序列化
过程。
希望这有帮助吗?
关于c# - 如何在 C# 中正确反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57969698/
我是一名优秀的程序员,十分优秀!