2016-09-02 21 views
1

私はC#で新しく、JsonのデシリアライズのためにGoogleに数百の例があることを知っています。私は多くを試しましたが、C#がデシリアライズのためにどのように動作するのか理解できませんでした。私はクラスを作成しJson WebClientのレスポンスをデシリアライズするC#

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

まず:

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

結果は次のようになります

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

それから私は、この文を使用してデシリアライズしようとしたが、理解できませんでした。

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

上記はあなたのJSONの配列を含んでProductsという名前のプロパティを持っている」オブジェクトを読み込み

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

あなたは使用する必要があります。

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; 
} 
+0

うまく説明されています。私はあなたの助けを大変ありがとうございます。 :-) – AAP

2

次のコードでVisual Basicでうまく働いたが、C#でこれと同様の操作を行う方法プロパティがProductIdおよびStockCountのオブジェクトです。したがって、

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また

あなたはjオブジェクトクラスに解析するJSONを試すことができますが、これをチェックアウトここに見ることができるよう

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

:あなたは、文字列のような1つのオブジェクトのみに値が含まれている場合 はまだあなたのC#のコードは動作します: http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm

関連する問題