2015-11-27 2 views
-1

это файл в формате JSON:определить строку структуру для объекта Deserialize JSon вложенных

{ 
    "Message": { 
    "Code": 200, 
    "Message": "request success" 
    }, 
    "Data": { 
    "USD": { 
     "Jual": "13780", 
     "Beli": "13760" 
    } 
    }, 
    "LastUpdate": "2015-11-27 22:00:11", 
    "ProcessingTime": 0.0794281959534 
} 

У меня есть проблема, когда я преобразовывая в класс, как это:

 public class Message 
    { 
     public int Code { get; set; } 
     public string Message { get; set; } 
    } 

    public class USD 
    { 
     public string Jual { get; set; } 
     public string Beli { get; set; } 
    } 

    public class Data 
    { 


    public USD USD { get; set; } 
} 

public class RootObject 
{ 
    public Message Message { get; set; } 
    public Data Data { get; set; } 
    public string LastUpdate { get; set; } 
    public double ProcessingTime { get; set; } 
} 

и когда я десериализация с этим код:

private void button1_Click(object sender, EventArgs e) 
     { 
      WebClient wc = new WebClient(); 
      var json = wc.DownloadString(textBox1.Text); 

      List<User> users = JsonConvert.DeserializeObject<List<User>>(json); 
      dataGridView1.DataSource = json; 
     } 

Когда я запускаю код я получаю необработанное исключение, которое говорит:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[WindowsFormApp.EmployeeInfo+Areas]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. 
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.” 

Может ли кто-нибудь сказать мне, что я делаю неправильно, и как получить последний пункт десериализации правильно?

+1

Непонятно, что вы просите. Не могли бы вы объяснить, какую часть сообщения об ошибке вы не поняли? –

ответ

1

JSON.Net ожидает (когда вы передаете тип коллекции методу DeserializeObject), что корневой объект является массивом. Согласно вашим данным, это объект и его нужно обрабатывать как особый пользователь.

И тогда вам нужно передать, что в DataSource, так что вы бы затем обернуть десериализованный User в var userList = new List<User>{user};

0

Сообщения об ошибке довольно просты. Вы пытаетесь десериализовать то, что не является массивом (ваша строка JSON) в коллекцию (List<User>). Это не коллекция, поэтому вы не можете этого сделать. Вы должны сделать что-то вроде JsonConvert.DeserializeObject<RootObject>(json), чтобы получить один объект.

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