从JSON字符串中提取数据

时间:2016-08-10 22:44:57

标签: c# json

我尝试从C#中的JSON字符串中提取数据,到目前为止,我建议使用JavaScriptSerializer。我没有太多运气,但是当使用int.Parse时我得到的结果不是很少。

using (WebClient wc = new WebClient())
        {
            string json = wc.DownloadString("www.redacated.com/" + args[0]);
            var serializer = new JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(json);
            var url = int.Parse(result["file_url"]);
            Console.WriteLine("URL: {0}", url);
        }

链接的网址返回:

{
    "file_size": 6606723,
    "file_url": "redacted",
    "preview_url": "redacted",
    "title": "redacted"
}

这导致以下错误:

Unhandled Exception: System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at CallSite.Target(Closure , CallSite , Type , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at Workshopdownloader.Workshopdownloader.Main(String[] args) in c:\users\*\documents\visual studio 2015\Projects\ConsoleApplication7\ConsoleApplication7\Program.cs:line 29

2 个答案:

答案 0 :(得分:0)

有一个POCO类来代表你的对象:

public YOUR_POCO
{
    public int file_size {get; set;}
    public string file_url {get; set;}
    public string preview_url {get; set;}
    public string title {get; set;}
}

然后您只需要使用JSON .Net将其反序列化为它:

YOUR_POCO poco = JsonConvert.DeserializeObject<YOUR_POCO>(output);

像访问任何其他对象一样访问它

// use the file size
var file_size = poco.file_size;

答案 1 :(得分:0)

实际上您的代码很酷,只需更改转换。

您最初尝试将字符串转换为变为且整数在任何情况下都不会发生,因此编译器在到达时抛出FormatException

var url = int.Parse(result["file_url"]);

更改为

var url = result["file_url"];