读取 json API 时出错



我正在尝试通过访问商店提供的API来获取产品列表。以下是我的代码

public class CKProductAPI
{
    public List<ProductListNames> ProductList(string url)
    {
        List<ProductListNames> objProducts = new List<ProductListNames>();
        try
        {
            var wc = new WebClient();
            wc.Headers.Add("Fk-Affiliate-Id", ConfigurationManager.AppSettings["FK-AFFID"]);
            wc.Headers.Add("Fk-Affiliate-Token", ConfigurationManager.AppSettings["FK-TKN"]);
            string productFeedXml = wc.DownloadString(url);
            JObject jObject = (JObject)JsonConvert.DeserializeObject(productFeedXml);
            var jProductData = jObject["productInfoList"];
            foreach (var item in jProductData)
            {
                string strproductId, strtitle, strimageUrls, strmaximumRetailPrice, strsellingPrice, strcurrency, strproductBrand, strproductUrl, strinStock;
                try { strproductId = item["productBaseInfo"]["productIdentifier"]["productId"].ToString(); }
                catch { strproductId = ""; }
                try { strtitle = item["productBaseInfo"]["productAttributes"]["title"].ToString(); }
                catch { strtitle = ""; }
                try { strimageUrls = item["productBaseInfo"]["productAttributes"]["imageUrls"].ToString(); }
                catch { strimageUrls = ""; }
                try { strmaximumRetailPrice = item["productBaseInfo"]["productAttributes"]["maximumRetailPrice"].ToString(); }
                catch { strmaximumRetailPrice = ""; }
                try { strsellingPrice = item["productBaseInfo"]["productAttributes"]["sellingPrice"].ToString(); }
                catch { strsellingPrice = ""; }
                try { strcurrency = item["productBaseInfo"]["productAttributes"]["currency"].ToString(); }
                catch { strcurrency = ""; }
                try { strproductBrand = item["productBaseInfo"]["productAttributes"]["productBrand"].ToString(); }
                catch { strproductBrand = ""; }
                try { strproductUrl = item["productBaseInfo"]["productAttributes"]["productUrl"].ToString(); }
                catch { strproductUrl = ""; }
                try { strinStock = item["productBaseInfo"]["productAttributes"]["inStock"].ToString(); }
                catch { strinStock = ""; }
                objProducts.Add(new ProductListNames
                {
                    productId = strproductId,
                    title = strtitle,
                    imageUrls = strimageUrls,
                    maximumRetailPrice = strmaximumRetailPrice,
                    sellingPrice = strsellingPrice,
                    currency = strcurrency,
                    productBrand = strproductBrand,
                    productUrl = strproductUrl,
                    inStock = strinStock
                });
            }
        }
        catch (Exception)
        {
            throw;
        }
        return objProducts;
    }

    public class ProductListNames
    {
        public string productId { get; set; }
        public string title { get; set; }
        public string imageUrls { get; set; }
        public string maximumRetailPrice { get; set; }
        public string sellingPrice { get; set; }
        public string currency { get; set; }
        public string productUrl { get; set; }
        public string productBrand { get; set; }
        public string inStock { get; set; }
        public string size { get; set; }
    }
}

我收到以下错误::

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:<。路径 '',第 0 行,位置 0。

您似乎正在收到 xml 响应。如果添加 ACCEPT 标头没有帮助(如 refgor 所说),那么您可能需要先将 xml 序列化为 json,然后将其用作 JObject。这可能会有所帮助。

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

所以邮政

然后,您可以使用JObject.Parse(jsonText)解析 jsonText

似乎是您的源 JSON 字符串无效或实际上不是 JSON 字符串。

请检查您发出的HTTP请求,服务器是否为您提供JSON。HTTP 服务可能会根据要添加到 HTTP 请求的"接受"标头做出不同的响应。

为了确保向服务询问有关 JSON 的信息,可以将Accept: application/JSON HTTP 标头添加到请求中。否则,服务器可能会自行决定并根据您的请求使用 XML 进行响应。

如果您的服务器使用 JSON 进行响应,那么它可能会有所帮助:

var wc = new WebClient();
client.Headers.Set("Accept", "application/json");

您也可以检查响应Content-Type,但随后需要使用另一种WebClient方法,而不是DownloadString

相关内容

  • 没有找到相关文章

最新更新