2017-10-07 18 views
0

こんにちは、私はテキストファイルからjsonデータを読み込もうとしていますが、動作しません。 ウェブサイトからデータを取得しようとすると問題なく動作します。 誰でもこの問題を解決する解決策を知っていますか?ありがとうございます。 ファイルからJsonデータを読み取る

  private void Form1_Load(object sender, EventArgs e) 
     { 
      string path = @"C:\Users\spacefrog\Documents\Visual Studio 2017\Projects\json_test_solution\json_test\bin\Debug\test.json"; 

      // Stream stream = File.OpenRead(path); 
      WebClient client = new WebClient(); 
      Stream stream = client.OpenRead("https://www.cryptocompare.com/api/data/coinlist/"); // works perfect 
      /* 
      Stream stream = client.OpenRead(path); // doesn't work 
      Stream stream = File.OpenRead(path); // doesn't work 
      */ 

/* File Data content (same as website) 
{ 
"Response": "Success", 
"Message": "Coin list succesfully returned!", 
"BaseImageUrl": "https://www.cryptocompare.com", 
"BaseLinkUrl": "https://www.cryptocompare.com", 
"Data": { 
"LTC": { 
"Id": "3808", 
"Url": "/coins/ltc/overview", 
"ImageUrl": "/media/19782/ltc.png", 
"Name": "LTC", 
"CoinName": "Litecoin", 
"FullName": "Litecoin (LTC)", 
"Algorithm": "Scrypt", 
"ProofType": "PoW", 
"SortOrder": "2" 
} 
... 
}, 
"Type": 100 
} 
    */ 

StreamReader reader = new StreamReader(stream); 
JObject json = JObject.Parse(reader.ReadLine()); 
stream.Close(); 



MessageBox.Show((string)json["Response"]); 

} 
+0

あなたはどのようなエラーが出るのですか? 「うまくいかない」という表現はあまり説明的ではありません。 –

答えて

1
JObject json = JObject.Parse(reader.ReadLine()); 

どうJSON.NETパーサは、最初の行を解析する必要がありますか?あなたのコメントを見ると、最初の行は

のようです
{ 

有効なJSONオブジェクトのように見えません。 ReadToEndメソッドを見てみましょう。 ところで、使用しているスコープ内でStreamReaderを使用することができます。あなたは本当にあなたが

webClient.DownloadFile(url,filename); 

または書き込みに使用できるファイルに保存したい場合は、そのJSON

WebClient webClient = new WebClient(); 
var json = webClient.DownloadString("https://www.cryptocompare.com/api/data/coinlist/"); 

var rootObj = JsonConvert.DeserializeObject<SOTest.RootObject>(json); 
//OR var jObj = JObject.Parse(json); 

を解析するために一時ファイルを使用する必要はありません

0

上のjsonをファイルにする

File.WriteAllText(filename, json); 

またはiあなたはclient.OpenRead道を行きたいfを

var f = File.Create(filename); 
stream.CopyTo(f); 

public class SOTest 
{ 
    public class DataItem 
    { 
     public string Id { get; set; } 
     public string Url { get; set; } 
     public string ImageUrl { get; set; } 
     public string Name { get; set; } 
     public string Symbol { get; set; } 
     public string CoinName { get; set; } 
     public string FullName { get; set; } 
     public string Algorithm { get; set; } 
     public string ProofType { get; set; } 
     public string FullyPremined { get; set; } 
     public string TotalCoinSupply { get; set; } 
     public string PreMinedValue { get; set; } 
     public string TotalCoinsFreeFloat { get; set; } 
     public string SortOrder { get; set; } 
    } 

    public class RootObject 
    { 
     public string Response { get; set; } 
     public string Message { get; set; } 
     public string BaseImageUrl { get; set; } 
     public string BaseLinkUrl { get; set; } 
     public Dictionary<string,DataItem> Data { get; set; } 
     public int Type { get; set; } 
    } 
} 
関連する問題