2016-08-10 2 views
0

Я пытаюсь извлечь данные из строки JSON в C#, пока мне было рекомендовано использовать JavaScriptSerializer. Мне не повезло, но при использовании int.Parse я получаю меньше минимальных результатов.Извлечь данные из строки JSON

Связанные 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 
+1

'int.Parse (result [" file_url "]);' <- вы имели в виду '' file_size "'? – Blorgbeard

+0

Если вы уверены, что это всегда число, возможно, вызывается '.Trim()' значение? –

+3

Я бы настоятельно предложил Json.NET - Newtonsoft. Это легкий способ использовать – Noctis

ответ

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

На самом деле ваш код круто, просто изменить преобразование.

Вы сначала пытается преобразовать строку, чтобы стать и целым числом, которое не может произойти в любом случае бы то ни было, так что компилятор бросает FormatException, когда он получает там

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

Изменения в

var url = result["file_url"]; 
+0

«rying, чтобы преобразовать строку, чтобы стать, и целое число которой не может быть» - Не верно, вы можете преобразовать строку в целое число, если преобразованная строка может быть целым числом. I.e., «123» могут быть преобразованы, «ABC» не может. – Tim