2015-03-05 4 views
0

Я делаю громадное приложение для Windows, но у меня проблема.C# JSON.NET недопустимый тип

Когда я преобразовал строку JSON в классы C#, я увидел, что имена классов просто содержат числа.

Как можно десериализовать строку JSON?

public class 904 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
     public string name_url { get; set; } 
     public string region_path { get; set; } 
    } 

    public class Result 
    { 
     public 904 904 { get; set; } 
    } 

    public class RootObject 
    { 
     public bool status { get; set; } 
     public Result result { get; set; } 
     public int time_valid_to { get; set; } 
    } 

JSON строка

{"status":true,"result":{"904":{"id":"904","name":"Wien Alsergrund","name_url":"wien_alsergrund","region_path":"oesterreich\/wien\/wien_alsergrund"}},"time_valid_to":1424978715} 
+0

Какое первоначальное имя класса возможно из того, что мы можем вывести, что происходит – Blaatz0r

+0

Вы не можете иметь имя класса, которое является номером – Aviatrix

+0

Вы не можете использовать номер при запуске имени класса, добавьте символ '_', например , – FLCL

ответ

2

Похоже result собственность фактически карта результатов - так что вы можете представить, что с Dictionary<,>. Это работает:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using Newtonsoft.Json; 

public class ResultEntry 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public string name_url { get; set; } 
    public string region_path { get; set; } 
} 


public class RootObject 
{ 
    public bool status { get; set; } 
    public Dictionary<int, ResultEntry> result { get; set; } 
    public int time_valid_to { get; set; } 
} 

class Test 
{ 
    static void Main() 
    { 
     string json = File.ReadAllText("json.txt"); 
     var root = JsonConvert.DeserializeObject<RootObject>(json); 
     Console.WriteLine(root.result[904].name); 
    } 
} 

Я настоятельно рекомендую использовать чистые имена свойств и атрибутов с уточнением сказать Json.NET, как отобразить их в JSON, хотя.

+0

Большое спасибо! Работает отлично! –

Смежные вопросы