2017-11-19 20 views
0

リストにいくつかのJsonデータを逆シリアル化しようとしていますが、リストはデータを返しません。Jsonリストのオブジェクトをデシリアライズするとnullが返される

私が使用していますJSON文字列の例がある

{ 
"sequence":82334, 
"bids": 
[ 
    ["7660","10.02477743",11], 
    ["7600","0.01",1], 
    ["7500","0.01",1] 
], 
"asks": 
[ 
    ["7672.57","0.63979186",1], 
    ["7673.64","1",1], 
    ["7678.95","1",1] 
] 

}

は、私は私に

public class ProductOrderBook 
{ 
    public int sequence { get; set; } 
    public List<List<object>> bids { get; set; } 
    public List<List<object>> asks { get; set; } 
} 

を与えたオブジェクトのクラスを生成するのにjson2csharpを使用し、これは私の私の方法であり、 jsonを逆シリアル化するために使用します。

public static async Task<List<ProductOrderBook>> GetProductOrderBook() 
{ 
    string ts = GetNonce(); 
    string method = "/products/BTC-USD/book?level=2"; 
    string sig = GetSignature(ts, "GET", method, string.Empty); 
    List<ProductOrderBook> productOrderBooks; 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(baseURL); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", sig); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", ts); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase); 
     client.DefaultRequestHeaders.Add("User-Agent", userAgent); 

     HttpResponseMessage response = client.GetAsync(method).Result; 
     string json = await response.Content.ReadAsStringAsync(); 
     productOrderBooks = JsonConvert.DeserializeObject<List<ProductOrderBook>>(json); 
     } 
     return await Task.Run(() => productOrderBooks);    
    } 

応答文字列で有効なJsonが返されました。なぜproductOrderBooksリストにデータがないのかわかりません。私は入札を保持し、データを尋ねると、あなたの投稿をJSONを1として

public List<List<object>> bids { get; set; } 
public List<List<object>> asks { get; set; } 
+0

あなたのJSONは、単一の製品のオーダーブックですが、あなたがそれらの配列をdeseralizeしようとしているこれが事実であるように見えますか? –

+0

それはあなたの完全なJSONですか、あるいは外側の配列またはラッパーオブジェクトがありますか? –

+0

こんにちはサムとブライアン、時間を割いてくれてありがとう。うん、それは完全なJsonのラッパーです。 Json2CSharpによって与えられたオブジェクトクラスのリストがあり、そこではちょっと混乱してしまったことを指摘してくれてありがとうございます。 –

答えて

2

にこれらを渡すために、2つの以上のオブジェクトクラスを作成する必要があります、それはProductOrderBookのリストではありません。これは単なるProductOrderBookのインスタンスです。

だから、あなたのコードは次のようになります。

public static async Task<ProductOrderBook> GetProductOrderBook() 
{ 
    string ts = GetNonce(); 
    string method = "/products/BTC-USD/book?level=2"; 
    string sig = GetSignature(ts, "GET", method, string.Empty); 
    ProductOrderBook productOrderBooks; 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(baseURL); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", sig); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", ts); 
     client.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase); 
     client.DefaultRequestHeaders.Add("User-Agent", userAgent); 

     HttpResponseMessage response = client.GetAsync(method).Result; 
     string json = await response.Content.ReadAsStringAsync(); 
     productOrderBooks = JsonConvert.DeserializeObject<ProductOrderBook>(json); 
     } 
     return await Task.Run(() => productOrderBooks);    
    } 
+0

こんにちはAkashはこれを指摘してくれてありがとう、なぜ私はとても愚かではなかったのですか?この修正はうまくいきました。 –

+0

うれしいことに、助けてくれました。 –

関連する問題