2016-09-02 3 views
1

저는 C#에서 새로 왔으며 Json 비 직렬화를 위해 Google에서 수백 가지 예제가 있다는 것을 알고 있습니다. 많은 노력했지만 C#을 deserialization 작동 방법을 이해할 수 없습니다.Json 웹 클라이언트 응답 deserialize 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 

답변

1

당신은 사용해야합니다 : 당신의 JSON 제품의 목록이 포함

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); 

때문에, jsonresult 당신이 Product의 목록을 가지고있다.

제품을 원한다면 예를 들어 사용할 수 있습니다. foreach

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

설명해주었습니다. 도와 주셔서 대단히 감사합니다. :-) – AAP

2

귀하의 JSON 읽기 "의 배열을 포함 Products라는 이름의 속성을 가진 개체 속성이 ProductIdStockCount 인 개체가 포함됩니다. 따라서,

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

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

해결책을 설명해 주셔서 감사합니다. – AAP

0

json 문자열에 2 개의 Product 개체에 대한 값이 있기 때문에 C# 코드가 작동하지 않습니다. 결과적으로 var jsonresult 변수에는 하나가 아닌 Product 객체의 배열이 포함됩니다. VB 코드에서는 각 Product 객체를 얻기 위해 Json 변수를 반복해야하므로 분명합니다. 당신이 http://www.newtonsoft.com/json/help/html/SerializingJSON.htm 또한

당신이하는 jobject 클래스와 구문 분석 JSON을 시도 할 수는이 체크 아웃 여기에서 볼 수 있듯이

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

: 당신은 문자열과 같은 하나의 개체에 대한 값을 포함하는 경우 아직도 당신의 C# 코드가 작동 것이다 : http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm