2017-11-14 4 views
0

Von https://yobit.net/api/3/depth/btc_usd?limit=5 ich habeYobit C#, jsonconvert.deserialize

string response = { "btc_usd":{ "asks":[[6657,0.06689384],[6680.47685546,0.001],[6680.47690546,0.00526334],[6697,0.05],[6698,0.05]],"bids":[[6656,0.02371773],[6640.00000001,0.0297727],[6640,0.34752146],[6637.46352566,0.0011574],[6634,0.00424518]]}} 

ich diese deserialisiert werden soll. Ich habe einige Klassen

public class Orderbook 
{ 
    [JsonProperty("asks")] 
    public List<BidAsk> asks { get; set; } 

    [JsonProperty("bids")] 
    public List<BidAsk> bids { get; set; } 
} 


public class BidAsk 
{ 
    public decimal price { get; set; } 
    public decimal volume { get; set; } 
} 

var jsonResponse = JsonConvert.DeserializeObject<Orderbook>(response); 

Nach dieser Operation bekam ich: jsonResponse.asks = null jsonResponse.bids = null

Was ich in der Deserialisierung falsch gemacht habe?

+2

würde ich raten, nur Ihre json in http://json2csharp.com/ Einfügen und klicken Sie auf generieren und es wird Ihnen die Klassen, die Sie für die Deserialisierung müssen. – Bearcat9425

Antwort

2

Es gibt eine zusätzliche Ebene für die Währung. Versuchen Sie so etwas wie:

public class Orderbook 
{ 
    [JsonProperty("btc_usd")] 
    public Currency BTCToUSD{ get; set; } 
} 

public class Currency 
{ 
    [JsonProperty("asks")] 
    public double[][] asks { get; set; } 

    [JsonProperty("bids")] 
    public double[][] bids { get; set; } 
} 

var jsonResponse = JsonConvert.DeserializeObject<Orderbook>(response); 

Hinweis ich das Angebot geändert haben/fragt von Arrays von Doppel auf Arrays wie das ist, wie sie in Ihrem Beispiel sind.

Sie könnten auch in decimal suchen, nicht sicher, wie Json.NET es handhabt, aber wenn Sie mit Finanzen beschäftigen, möchten Sie wahrscheinlich vorsichtig mit schwebender Präzision sein.

+0

Danke, es hat geholfen! Aber wenn ich ein anderes Paar habe, zum Beispiel "eth_usd"? Wie erkennt man es in jsonconverter? – John

0

Wie deserialize diese Antworten, wenn ich nicht weiß, welches Paar ich habe? Zum Beispiel können zwei verschiedene Anfragen:

1) https://yobit.net/api/3/depth/btc_usd?limit=5

2) https://yobit.net/api/3/depth/eth_usd?limit=5

Soll ich einen neuen JsonProperty für ein anderes Paar "eth_usd" erstellen?

[JsonProperty("eth_usd")] 
public Currency ETHToUSD{ get; set; } 

In diesem Fall werden in jeder Anfrage alle anderen Attribute der Klasse null sein. Ich möchte so etwas bekommen:

var Asks = jsonresponse.pair_name.asks