【发布时间】:2021-04-29 15:22:03
【问题描述】:
我一直在拼命想弄清楚如何从我从 api 调用收到的这个 json 响应中解析我需要的数据。这是响应的开头:
{
"response": {
"results": [
[
1002,
"Brent's Test Product o Fun",
"TEST001",
"1234567-",
"100000000281",
"12345678",
"",
"",
true,
"Brightpearl",
"2020-06-18T13:38:01.000-05:00",
"2021-04-27T07:45:24.000-05:00",
439,
null,
74,
1,
"LIVE",
null
],
[
1003,
"Brent's Test Product 2",
"TEST002",
"",
"",
"",
"",
"",
true,
"Brightpearl",
"2020-08-31T00:53:26.000-05:00",
"2021-04-27T07:45:24.000-05:00",
439,
null,
74,
1,
"LIVE",
null
],
[
1004,
"Brent's Test Product 3",
"TEST003",
"",
"",
"",
"",
"",
true,
"Brightpearl",
"2020-09-16T00:30:55.000-05:00",
"2021-04-27T07:45:24.000-05:00",
439,
null,
74,
1,
"LIVE",
null
],
我需要做的是遍历嵌套在“结果”中的节点。这些实际上是我需要使用的产品 skus。响应末尾返回了一堆元数据,我没有在此处包含。
我创建了这个类来处理结果。
public class SkuSearchResults
{
public int productId { get; set; }
public string productName { get; set; }
public string SKU { get; set; }
public string barcode { get; set; }
public string EAN { get; set; }
public string UPC { get; set; }
public string ISBN { get; set; }
public string MPN { get; set; }
public bool stockTracked { get; set; }
public string salesChannelName { get; set; }
public string createdOn { get; set; }
public string updatedOn { get; set; }
public int brightpearlCategoryCode { get; set; }
public int productGroupId { get; set; }
public int brandId { get; set; }
public int productTypeId { get; set; }
public string productStatus { get; set; }
public int primarySupplierId { get; set; }
}
【问题讨论】:
-
数组项看起来有一个固定的模式。鉴于这种情况如果您要使用 Json.NET,您可以使用来自 How to deserialize an array of values with a fixed schema to a strongly typed data class? 的转换器来反序列化为固定类型。并使用 Json.NET 制作 restsharp,请参阅 Can I set a custom JsonSerializer to RestSharp RestClient 和 RestSharp serialization to JSON, object is not using SerializeAs attribute as expected。
-
这些问题能充分回答你的问题吗?
-
@dbc 我确实定义了这个类来处理内容:我会在上面添加它。
-
也许“动态对象”可以在这里提供帮助。见:stackoverflow.com/questions/3142495/…
-
部分问题可能是结果数组中包含的对象不是对象而是数组本身。这些内部数组中的每个元素也没有属性名称,这使得它更具挑战性。 @dbc 提到的 Newtonsoft Json 库会有所帮助,但最终您需要将内部数组元素解析为 SkuSearchResults 对象的每个属性。顺便说一句,命名约定会使那个单一的。也许像
new SkuSearchResults{ productId = array[0], productName = array[1] ...}