Десериализовать отклик webapi в mvc4 viewmodel в приложении - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь настроить и использовать приложение отдыха webpi asp.net и использовать его из другого проекта.

Я сделал простой помощник для вызова службы, такой как

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

        }
    }

Я использую его из моего контроллера в другом проекте, например

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

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

                                                                          });

Возвращенные данные из службы выглядят как

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

Мой CustomerViewModel равен

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

Я вижу, что возвращаемые данные - это массив, и я пытаюсь преобразовать их в список.Я получаю сообщение об ошибке

Невозможно десериализовать массив JSON (то есть [1,2,3]) в тип 'WebApplication.Models.ViewModels.CustomerViewModel'.

Десериализованныйтип должен быть массивом или реализовывать интерфейс коллекции, такой как IEnumerable, ICollection или IList.

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

1 Ответ

0 голосов
/ 25 марта 2012

Я пытался сделать это неправильно.

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

                                                                          });

делает трюк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...