Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON反序列化Shopify Sharp C#.NET库_C#_Json_Json.net_Shopify - Fatal编程技术网

使用JSON反序列化Shopify Sharp C#.NET库

使用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

我已经在这个问题上转了好几天了,所以我想我最好问问论坛

我正在使用ShopifySharp C#库进行API调用,在反序列化产品时遇到了问题

我的应用程序需要抓取一定时间段的订单,然后遍历每个订单的行项目以检索产品。从本质上说,我的过程将是在Bronto中动态构建产品审查提醒电子邮件

无论如何,不起作用的部分如下:

下面是我进行调用的方法:

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"]);

        }