将从外部网址返回的JSON反序列化为对象

时间:2019-01-25 10:43:41

标签: arrays json asp.net-mvc asp.net-core serialization

好的,所以我的json返回字符串看起来像这样:

  {
    "categories": [
      {
        "id": "1",
        "category": "cat-1"
      },
      {
        "id": "2",
        "category": "cat-2"
      },
      {
        "id": "3",
        "category": "cat-3"
      }
    ]
  }

此返回的类别列表将在我的引导导航菜单中用作下拉列表,因此,我希望使用最少的呼叫次数,因为它可能不会经常更改以至于在每个页面中都不需要如果不需要,请刷新。

我如何写出我的Model / ViewModel绑定到这个字符串?然后,我想使用类似的方法返回可以迭代的CategoryViewModel列表。

public async Task<IEnumerable<CategoryViewModel>> GetCategoryList () {
        HttpResponseMessage response = await httpClient.GetAsync ("/categories");
        response.EnsureSuccessStatusCode ();

        var result = await response.Content
            .ReadAsAsync<IEnumerable<CategoryViewModel>> ();

        return result;
    }

1 个答案:

答案 0 :(得分:3)

您拥有的JSON模型需要一个容器类,例如:

public class CategoryViewModelContainer
{
    public IEnumerable<CategoryViewModel> Categories { get; set; }
}

//Assuming your category view model looks like this:
public class CategoryViewModel
{
    public int Id { get; set; }
    public string Category { get; set; }
}

您可以这样使用它:

var result = await response.Content.ReadAsAsync<CategoryViewModelContainer>();

现在您可以遍历以下类别:

foreach(var categoryModel in result.Categories)
{
    var categoryName = categoryModel.Category;
}