我是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
答案 0 :(得分:2)
您的JSON读取&#34;一个具有名为Products
的属性的对象,该属性包含具有属性ProductId
和StockCount
&#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