在应用程序中反序列化web api对mvc4视图模型的响应

时间:2012-03-25 00:00:12

标签: asp.net-mvc json.net asp.net-web-api

我正在尝试设置和使用asp.net webapi rest应用程序并从另一个项目中使用它。

我已经做了一个简单的帮助来调用像

这样的服务
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 :(得分:0)

我试图做错了。

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

                                                                          });

技巧