将嵌套反序列化的JSON从Controller传递到View

时间:2019-03-13 16:15:25

标签: c# .net json model-view-controller httpclient

使用 HttpClient 类将JSON转换为字符串并使用

反序列化之后
var response = Res.Content.ReadAsStringAsync().Result;

data = JsonConvert.DeserializeObject<List<Employee>>(response);

如何使用下面的模型将在控制器中从调用中收到的数据传递给视图?

        public class RuleType
        {
            public int Id { get; set; }
            public string Description { get; set; }
            public bool Inactive { get; set; }
        }

        public class RuleCategory
        {
            public int Id { get; set; }
            public string Description { get; set; }
            public bool Inactive { get; set; }
        }

        public class Employee
        {
            public string Description { get; set; }
            public object EndDateTime { get; set; }
            public int Id { get; set; }
            public bool Inactive { get; set; }
            public int RuleAction { get; set; }
            public DateTime StartDateTime { get; set; }
            public RuleType RuleType { get; set; }
            public RuleCategory RuleCategory { get; set; }
        }

这里是通话中的一个对象

[
    {
        "Description": "Test Description",
        "EndDateTime": null,
        "Id": 1,
        "Inactive": false,
        "RuleAction": -2,
        "StartDateTime": "2017-01-06T14:58:58Z",
        "RuleType": {
            "Id": 6,
            "Description": "Test Description",
            "Inactive": false
        },
        "RuleCategory": {
            "Id": 1,
            "Description": "Description",
            "Inactive": false
        }
    }
]

2 个答案:

答案 0 :(得分:1)

不确定我是否缺少什么,但是如果您有一个对象想要从控制器返回到视图,则只需:

return View(viewModel); // in your case viewModel = 'data'

答案 1 :(得分:0)

正如其他人已经在这里所说的那样,您应该将JSON反序列化为RootObject而不是Employee,就像这样:

var response = Res.Content.ReadAsStringAsync().Result;
var data = JsonConvert.DeserializeObject<List<RootObject>>(response);

然后可以使用以下方法将模型传递到视图中:

return View(data)

您还应该考虑将RootObject重命名为更有用的名称(例如employee?),因为RootObject并不是一个非常有用或描述性的名称。