Json反序列化web客户端响应c#

本文关键字:响应 客户端 web 反序列化 Json | 更新日期: 2023-09-27 18:05:25

我是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

Json反序列化web客户端响应c#

你应该使用:

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的列表。

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

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

您的JSON读取"具有名为Products的属性的对象,其中包含具有属性ProductIdStockCount的对象数组"。因此,

public class Inventory
{
    public ProductDetails[] Products { get; set; }
}
var inventory = JsonConvert.DeserializeObject<Inventory>(result);

你的c#代码不能工作,因为你的json字符串包含2个Product对象的值。因此,var jsonresult变量将包含一个Product对象数组,而不是一个。这在VB代码中很明显,因为您需要循环Json变量以获取每个Product对象。你的c#代码仍然可以工作,如果你的字符串只包含一个对象的值,像这样:

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

你可以在这里看到http://www.newtonsoft.com/json/help/html/SerializingJSON.htm

你也可以尝试json解析与JObject类,看看这个:http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm