Mvc Deserialize Json在foreach中列出

时间:2016-09-14 00:42:01

标签: c# json asp.net-mvc json.net

首先,我一直在搜索,但找不到答案。 我从在线Rest Api获取数据,该数据采用Json格式。 我正在尝试制作搜索应用,但无法在列表中搜索。

我如何在List中搜索?

我的POCO课程:

public class rootObject
{
    public List<Product> products { get; set; }
}
    public class Product
{
    public string id { get; set; }
    public string alias { get; set; }
    public string title { get; set; }
}

API类:

    public static string makeApiCall(string requestUrl)
    {
        var syncClient = new WebClient();
        var content = syncClient.DownloadString(requestUrl);
        Trace.WriteLine(content.ToString());
        return content;
    }

    public static Product GetByISBN(string isbn)
    {
            string requestUrl = string.Format(baseUrl + isbn);
            var resultString = RestClient.makeApiCall(requestUrl);
            var product = JsonConvert.DeserializeObject<Product>(resultString);


        return product;
    }

控制器:

        [HttpGet]
    public ActionResult Index()
    {
        List<Product> model = new List<Product>();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SearchViewModel VM)
    {
        var search = VM.searchValue.Trim();
        var searchValues = search.Replace(Environment.NewLine, ",").Split(',');

        List<Product> model = new List<Product>();
        foreach (var p in searchValues)
        {
            model = ApiCalls.GetByISBN(p).products;
        }

        return View(model);
    }

我的观点:

@model IEnumerable<Saxo.Web.Models.Product>
@{ 
    Html.RenderAction("Search");
}
<h1>Produkter</h1>
@ViewBag.Arr
@if (Model != null)
{
    foreach (var m in Model)
    {
        <p>@m.alias</p>
    }
}

我尝试过不同的方法,如:

var product = JsonConvert.DeserializeObject<List<Product>>(resultString);

我只得到最后一个对象。它没有在List中堆叠。 希望你们能帮忙。

JSON:

   {
   "products":[  
      {  
         "id":"3042442",
         "alias":"marte-meo-i-praksis_pernille-roug_haeftet_9788741201122",
       }
    ]
}

1 个答案:

答案 0 :(得分:0)

您发布的json与rootObject而非Product匹配,因此您必须使用rootObject进行反序列化:

var root = JsonConvert.DeserializeObject<rootObject>(resultString);

这会将json反序列化为rootObject的实例,该实例将List<Product>属性中包含所有产品。