2016-11-16 56 views
2

我遇到反序列化JSON对象的问题。这是JSON我有:如何将Json反序列化为对象

{ 
    "resource": [{ 
     "ClienteNome": "DOUGLAS DA SILVA BENEDITO", 
     "ClienteStatus": 0 
    }, { 
     "ClienteNome": "MARCO AURELIO DE SÁ GONÇALVES", 
     "ClienteStatus": 1 
    }, { 
     "ClienteNome": "MATHEUS CELESTINO CANDIDO", 
     "ClienteStatus": 2 
    }] 
} 

我想这样反序列化

public static async Task<List<Model.ClientesOnline>> GetAsync() 
{ 
    using (var client = new HttpClient()) 
    { 
      client.DefaultRequestHeaders.Add("X-DreamFactory-Api-Key", "36fda24fe5588fa4285ac6c6c2fdfbdb6b64699774c9bf777f706d05a88"); 
      string json = await client.GetStringAsync("http://api-u16.cloudapp.net/api/v2/nova207/_table/vw_clientes_online"); 

      var clientesonline = JsonConvert.DeserializeObject<List<Model.ClientesOnline>>(json); 
      return clientesonline; 
    } 
} 

模型

namespace NovaCloud.Model 
{ 
    class ClientesOnline : INotifyPropertyChanged 
    { 


     [JsonProperty("Resorces")] 
     private string clientenome; 
     public string ClienteNome { get { return clientenome; } 
      set 
      { 
       clientenome = value; 
       this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ClienteNome))); 
      } 
     } 

     private string clientestatus; 
     public string ClienteStatus { get { return clientestatus; } 
      set 
      { 
       clientestatus = value; 
       this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ClienteStatus))); 
      } 
     } 


     public event PropertyChangedEventHandler PropertyChanged; 

    } 
} 

错误消息

无法反序列化当前JSON数组(例如[1,2,3])分类为 'System.Collections.Generic.Dictionary`2 [System.String,Linker.Class.alternatives]' ,因为该类型需要JSON对象(例如, {“name”:“value”})至 反序列化正确。要修复此错误,请将JSON更改为 JSON对象(例如{“name”:“value”}),或者将反序列化类型更改为 数组或实现集合接口的类型(例如 ICollection,IList)可以从JSON 数组反序列化的列表。也可以将JsonArrayAttribute添加到该类型中,以强制它从一个JSON数组反向序列化为 。

我试图以多种方式

+0

你必须改变你的模型类。如果您不确定您的模型是否正确,请使用json2csharp进行检查。 (http://json2csharp.com/) –

回答

3

你的模式是错误的,你期望的对象不是一个列表,这是模型应该喜欢什么:

public class Resource 
{ 
    public string ClienteNome { get; set; } 
    public int ClienteStatus { get; set; } 
} 

public class ClientsOnline 
{ 
    public List<Resource> resource { get; set; } 
} 

当你反序列化你应该这样做:

var clientsOnline= JsonConvert.DeserializeObject<ClientesOnline>(json);