Json反序列化webclient响应C#

时间:2016-09-02 11:59:46

标签: c# json serialization

我是C#的新手,我知道谷歌有数百个关于Json反序列化的例子。我尝试了很多,但无法理解C#如何用于反序列化。

using (var client = new WebClient())
{
    client.Headers.Add("Content-Type", "text/json");                
    result = client.UploadString(url, "POST", json);
}

结果如下:

{"Products":[{"ProductId":259959,"StockCount":83},{"ProductId":420124,"StockCount":158}]}

首先我创建了一个类:

public class ProductDetails
{
    public string ProductId { get; set; }
    public string StockCount { get; set; }                        
}

然后我尝试使用此声明进行反序列化,但无法理解。

var jsonresult = JsonConvert.DeserializeObject<ProductDetails>(result);
Debug.WriteLine(jsonresult.ProductId);

以上代码在Visual Basic中运行良好但在C#

中如何做到这一点
Dim Json As Object
Set Json = JsonConverter.ParseJson(xmlHttp.responseText)

For Each Product In Json("Products")
    Debug.Print = Product("ProductId")
    Debug.Print = Product("StockCount")
Next Product

3 个答案:

答案 0 :(得分:2)

您的JSON读取&#34;一个具有名为Products的属性的对象,该属性包含具有属性ProductIdStockCount&#34;的对象数组。因此,

public class Inventory
{
    public ProductDetails[] Products { get; set; }
}

var inventory = JsonConvert.DeserializeObject<Inventory>(result);

答案 1 :(得分:2)

您应该使用:

public class Product
{
    public int ProductId { get; set; }
    public int StockCount { get; set; }
}

public class RootObject
{
    public List<Product> Products { get; set; }
}

var jsonresult = JsonConvert.DeserializeObject<RootObject>(result);

由于您的JSON包含产品列表,因此在jsonresult中您有Product列表。

如果你想获得产品,你可以使用例如。的foreach

foreach(Product p in jsonresult.Products)
{
    int id = p.ProductId;
}

答案 2 :(得分:0)

您的C#代码无法正常工作,因为您的json字符串包含2个Product对象的值。因此,var jsonresult变量将包含一个Product对象数组,而不是一个。 在VB代码中显而易见的是,您需要循环Json变量以获取每个Product对象。 如果你只为一个对象包含值,那么你的C#代码仍然可以工作:

{"ProductId" = 420124,"StockCount" = 158}

正如您在此处所见http://www.newtonsoft.com/json/help/html/SerializingJSON.htm

您也可以尝试使用JObject类进行json解析,请查看:http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm