使用JSON反序列化Shopify Sharp C#.NET库
我已经在这个问题上转了好几天了,所以我想我最好问问论坛 我正在使用ShopifySharp C#库进行API调用,在反序列化产品时遇到了问题 我的应用程序需要抓取一定时间段的订单,然后遍历每个订单的行项目以检索产品。从本质上说,我的过程将是在Bronto中动态构建产品审查提醒电子邮件 无论如何,不起作用的部分如下: 下面是我进行调用的方法:使用JSON反序列化Shopify Sharp C#.NET库,c#,json,json.net,shopify,C#,Json,Json.net,Shopify,我已经在这个问题上转了好几天了,所以我想我最好问问论坛 我正在使用ShopifySharp C#库进行API调用,在反序列化产品时遇到了问题 我的应用程序需要抓取一定时间段的订单,然后遍历每个订单的行项目以检索产品。从本质上说,我的过程将是在Bronto中动态构建产品审查提醒电子邮件 无论如何,不起作用的部分如下: 下面是我进行调用的方法: public List<T> CallService<T>(string query) { var dat
public List<T> CallService<T>(string query)
{
var data = new List<T>();
var fullyEscapedUri = _ShopUri.AbsoluteUri.EndsWith("/") ? _ShopUri : new Uri(_ShopUri + "/");
var uri = new Uri(fullyEscapedUri, typeof(T).Name);
if (!string.IsNullOrWhiteSpace(query))
{
var uriBuilder = new UriBuilder(uri) { Query = query };
uri = uriBuilder.Uri;
}
string url = String.Format("{0}{1}", _ShopUri, query);
// The WebRequest method will compile for .net4.5 but not 1.4.
var request = WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json";
string base64EncodedUsernameAndPassword = string.Format("{0}:{1}", _Username, _Password);
string authHeader = string.Format("Basic {0}", Convert.ToBase64String(Encoding.UTF8.GetBytes(base64EncodedUsernameAndPassword)));
request.Headers["Authorization"] = authHeader;
using (var response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
string json = reader.ReadToEnd();
var jsonObj = JsonConvert.DeserializeObject(json) as JObject;
var jsonArray = jsonObj[_ObjectType] as JArray; // code is crashing here for product json. Order json is being parsed fine.
foreach (var jsonEmp in jsonArray)
{
var obj = JsonConvert.DeserializeObject<T>(jsonEmp.ToString());
data.Add(obj);
}
}
}
}
return data;
}
我已经验证了进入这个函数的所有变量都是正确的(查询URL、对象类型、用户名、密码……)。我已经验证了问题行前面的代码是否返回了预期的JSON字符串
下面是返回的JSON-我只获取两个字段:
{
“产品”:{
“手柄”:“我的产品手柄”,
“图像”:[
{
“id”:11112222333444,
“产品id”:1234567890,
"立场":一,,
“创建时间”:“2018-12-11T16:05:26-06:00”,
“更新时间”:“2018-12-11T16:05:26-06:00”,
“alt”:空,
“宽度”:800,
“高度”:800,
“src”:https://cdn.shopify.com/some_url",
“变体_id”:[],
“管理图形api id”:gid://shopify/ProductImage/some_other_url"
}
]
}
}
在我看来,您不需要为一些项目创建类。我将给你一个我的代码片段的例子
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
var data = (JObject)JsonConvert.DeserializeObject(responseFromServer);
var products = data["products"].Children();
foreach (var product in products)
{
Console.WriteLine("the prod ID number : "+product["id"]);
}
您可以使用数组索引从json获取任何产品项信息。
希望这能把你推向正确的方向。或者至少给你一些思考的东西 我只使用products.json端点,而不是使用ID(product/{product ID}.json)检索单个端点。然后,我从整个序列化产品列表中获取订单。除了我返回的是“产品”对象,而不是“产品”。我认为我的情况下的问题不是我试图将单个元素放入JArray中……或者这就是问题所在?
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
var data = (JObject)JsonConvert.DeserializeObject(responseFromServer);
var products = data["products"].Children();
foreach (var product in products)
{
Console.WriteLine("the prod ID number : "+product["id"]);
}