2017-10-07 115 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。

0

您不必使用臨時文件來解析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); 

,如果你真的想保存到一個文件,你可以使用

webClient.DownloadFile(url,filename); 

或寫json以上到文件

File.WriteAllText(filename, json); 

或i F你想去的client.OpenRead方式

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