c# Json 到对象列表
c# Json to object list
我有一个访问 API 并检索一些 Json 值的函数,这些值被返回并粘贴到富文本框中。我如何才能将此 Json 转换为对象列表?互联网上充斥着我要问的问题,但在阅读和尝试所有内容后我并没有变得更聪明。
这是函数,URL 是检索 Json.
的 Api link
public string GetApi(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
这是Json结构
{"id":19684,"buys":[{"listings":10,"unit_price":94,"quantity":2498},{"listings":42,"unit_price":93,"quantity":10398},{"listings":139,"unit_price":92,"quantity":34501},{"listings":8,"unit_price":91,"quantity":1939},{"listings":38,"unit_price":90,"quantity":9270},{"listings":7,"unit_price":89,"quantity":1266},{"listings":43,"unit_price":88,"quantity":10565},{"listings":23,"unit_price":87,"quantity":5476},{"listings":80,"unit_price":86,"quantity":19827},
首要任务是使用库来解析 JSON。对于这个答案,我使用 Newtonsoft.Json,最常用的 .NET JSON 库之一。
然后,您从服务器收到的文档的结构应该被识别。我只是在这里猜测,但我认为它类似于下面定义的 classes。 JsonProperty
是一个属性,用于指定从 JSON 文档映射到 属性 的字段名称。没有必要指定它,仅当您的 属性 名称与 JSON 文档中的字段名称不同时。在这种情况下,unit_price
与属性的标准 .NET PascalCase 命名约定不匹配。
public class Listings
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
public List<Buy> Buys { get; private set; }
public Listings()
{
Buys = new List<Buy>();
}
}
public class Buy
{
[JsonProperty(PropertyName = "listings")]
public int Listings { get; set; }
[JsonProperty(PropertyName = "unit_price")]
public int UnitPrice { get; set; }
[JsonProperty(PropertyName = "quantity")]
public int Quantity { get; set; }
}
一旦定义了 class 结构,就可以让库完成所有工作。查看文档以获取更多详细信息,这里是如何在您已编写的方法中检索列表。
public Listings GetApi(string url)
{
...
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonReader = new JsonTextReader(reader);
var serializer = new JsonSerializer();
return serializer.Deserialize<Listings>(jsonReader);
}
...
}
我有一个访问 API 并检索一些 Json 值的函数,这些值被返回并粘贴到富文本框中。我如何才能将此 Json 转换为对象列表?互联网上充斥着我要问的问题,但在阅读和尝试所有内容后我并没有变得更聪明。
这是函数,URL 是检索 Json.
的 Api linkpublic string GetApi(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
这是Json结构
{"id":19684,"buys":[{"listings":10,"unit_price":94,"quantity":2498},{"listings":42,"unit_price":93,"quantity":10398},{"listings":139,"unit_price":92,"quantity":34501},{"listings":8,"unit_price":91,"quantity":1939},{"listings":38,"unit_price":90,"quantity":9270},{"listings":7,"unit_price":89,"quantity":1266},{"listings":43,"unit_price":88,"quantity":10565},{"listings":23,"unit_price":87,"quantity":5476},{"listings":80,"unit_price":86,"quantity":19827},
首要任务是使用库来解析 JSON。对于这个答案,我使用 Newtonsoft.Json,最常用的 .NET JSON 库之一。
然后,您从服务器收到的文档的结构应该被识别。我只是在这里猜测,但我认为它类似于下面定义的 classes。 JsonProperty
是一个属性,用于指定从 JSON 文档映射到 属性 的字段名称。没有必要指定它,仅当您的 属性 名称与 JSON 文档中的字段名称不同时。在这种情况下,unit_price
与属性的标准 .NET PascalCase 命名约定不匹配。
public class Listings
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
public List<Buy> Buys { get; private set; }
public Listings()
{
Buys = new List<Buy>();
}
}
public class Buy
{
[JsonProperty(PropertyName = "listings")]
public int Listings { get; set; }
[JsonProperty(PropertyName = "unit_price")]
public int UnitPrice { get; set; }
[JsonProperty(PropertyName = "quantity")]
public int Quantity { get; set; }
}
一旦定义了 class 结构,就可以让库完成所有工作。查看文档以获取更多详细信息,这里是如何在您已编写的方法中检索列表。
public Listings GetApi(string url)
{
...
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonReader = new JsonTextReader(reader);
var serializer = new JsonSerializer();
return serializer.Deserialize<Listings>(jsonReader);
}
...
}