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
你应该使用:
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
的属性的对象,其中包含具有属性ProductId
和StockCount
的对象数组"。因此,
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