2017-12-19 6 views
-1

を選ぶ: https://min-api.cryptocompare.com/data/histominute?fsym=BTC&tsym=USD&limit=60&aggregate=3&e=KrakenC#の構文解析JSON配列と私は、このJSON配列を解析しようとしている値

アイデアは、各タイムスタンプ(すべての必要ありません)のためのいくつかの値を読み込みます。 1回目のタイムスタンプ、クローズ、ハイ、ロー、オープンのデータはどうしたのですか?

私はシンプルなjsonの刺青に使用したいくつかの方法を試しましたが、これは私の挑戦であるように見え、私が試した方法でデータを読み取ることができません。

まず私はこのような別のクラスファイルを作っ:

namespace HistoryData 
{ 
    class DataQuery 
    { 
     public string Data { get; set; } 
     public string Time { get; set; } 
     public string Close { get; set; } 
     public string High { get; set; } 
     public string Low { get; set; } 
     public string Open { get; set; } 
     public string Volumefrom { get; set; } 
     public string Volumeto { get; set; } 
    } 
} 

その後の解析:

const string url = @"https://min-api.cryptocompare.com/data/histominute? 
fsym=BTC&tsym=USD&limit=30&aggregate=3&e=Kraken"; 
var client = new WebClient(); 
var content = client.DownloadString(url); 
var results = JsonConvert.DeserializeObject<List<DataQuery>>(content); 
var Time1 = (results[1].Time); 
var Close1 = (results[1].Close); 

+1

あなたはどんな問題に直面していますか? [ask]を読んでください。 – CodeCaster

+1

良い質問をすることができるようになるためのヒントをいくつかご紹介します。 JSONスキーマと一致するプロパティを持つクラスを作成します。 JSON.Netを使用して、JSONをオブジェクトまたはリストに逆シリアル化します。それを使ってあなたのデータを入手してください。 – Crowcoder

+1

あなたはあなたが違うことを試したと言いますが、あなたのアプローチが何だったのか詳しく説明できますか?あなたはどこにいるのですか? – Glubus

答えて

0

を働いていない、あなたが最も外側のコンテナがあるでしょうhttps://jsonformatter.curiousconcept.com/を使用してJSONをフォーマットした場合オブジェクトではなく、配列:

{ 
    "Response":"Success", 
    "Type":100, 
    "Aggregated":true, 
    "Data": [/*...*/], 
    "TimeTo":1513705980, 
    "TimeFrom":1513695060, 
    "FirstValueInArray":true, 
    "ConversionType":{ 
     "type":"force_direct", 
     "conversionSymbol":"" 
    } 
} 

したがって、このJSON構造を反映する適切なルートデータモデルに逆シリアル化する必要があります。 DataQueryには、ネストされた"Data"オブジェクトのみが反映されます。

public class Datum 
{ 
    public long time { get; set; } 
    public decimal close { get; set; } 
    public decimal high { get; set; } 
    public decimal low { get; set; } 
    public decimal open { get; set; } 
    public double volumefrom { get; set; } 
    public double volumeto { get; set; } 
} 

public class ConversionType 
{ 
    public string type { get; set; } 
    public string conversionSymbol { get; set; } 
} 

public class RootObject 
{ 
    public string Response { get; set; } 
    public int Type { get; set; } 
    public bool Aggregated { get; set; } 
    public List<Datum> Data { get; set; } 
    public long TimeTo { get; set; } 
    public long TimeFrom { get; set; } 
    public bool FirstValueInArray { get; set; } 
    public ConversionType ConversionType { get; set; } 
} 

などデシリアライズ:あなたはあなたのためにそのモデルを設計するhttp://json2csharp.com/またはPaste JSON as Classesを使用することができます

var root = JsonConvert.DeserializeObject<RootObject>(content); 
var results = root.Data; 

var Time1 = (results[1].time); 
var Close1 = (results[1].close); 

注:

  • closehighlowopen見ているので私はそのタイプをdecimalに変更しました。

  • 安全のため、タイムスタンプをlongに変更しました。

作業.Net fiddle