2017-10-07 132 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; } 
    } 
}