Deserializar repsonse WebAPI al modelo de vista mvc4 en la solicitud

votos
1

Estoy tratando de configurar y consumen un WebAPI aplicación asp.net resto y lo consumen de otro proyecto.

He hecho un ayudante simple de llamar al servicio como

public static string GetApiResponse(string apiMethod,Dictionary<string,string>queryString=null)
    {
        using (var client = new WebClient())
        {
            client.Headers.Add(ApiKey, ConfigurationManager.AppSettings[ApiKey]);
            //add any query string values into the client
            if (queryString != null)
            {
                foreach (var query in queryString)
                {
                    client.QueryString.Add(query.Key, query.Value);
                }
            }
            try
            {
               string url = string.Format({0}{1}, ConfigurationManager.AppSettings[ApiBaseUrl],apiMethod);
               return(client.DownloadString(url));
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

        }
    }

Estoy consumirlo de mi controlador en un proyecto diferente, como

  private IEnumerable<CustomerModel> CustomerDetails()
    {
        var json = ApiRestHelper.GetApiResponse(Customer/Get);

        var data = JsonConvert.DeserializeObject<CustomerViewModel>(json, new JsonSerializerSettings
                                                                          {

                                                                          });

Los datos devueltos por el servicio es el aspecto

[{CustomerId:24a62bf8-7a4e-4837-859d-1f04dc983011,FirstName:Joe,LastName:Bloggs,StoreCustomerId:null}]

Mi CustomerViewModel es

 public class CustomerViewModel
{
    public IEnumerable<CustomerModel> Customers { get; set; }
}

Puedo ver los datos que se devuelve es una matriz y estoy tratando de convertirlo en la lista. Me aparece un error

No se puede deserializar JSON array (es decir, [1,2,3]) en tipo 'WebApplication.Models.ViewModels.CustomerViewModel'.

El tipo deserializado debe ser una matriz o implementar una interfaz de colección como IEnumerable, ICollection o IList.

¿Qué necesito cambiar para permitir que la deserialización en mi modelo de vista?

Publicado el 24/03/2012 a las 22:00
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Yo estaba tratando de hacerlo mal.

        var data = JsonConvert.DeserializeObject<List<CustomerModel>>(json, new JsonSerializerSettings
                                                                          {

                                                                          });

Hace el truco

Respondida el 24/03/2012 a las 22:34
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more