使用NewtonSoft进行反序列化时,对象未使用JSON数据填充

时间:2017-08-28 23:14:15

标签: c# json

    using Telerik.Newtonsoft.Json;

MVC控制器:

    public ActionResult Index()
    {
        string responseStr = GetJSON();
        var jObject = JsonConvert.DeserializeObject<TheViewModel>(responseStr);

        if (jObject == null)
        {
            return Content("");
        }

        return View("Default", jObject);
    }

临时硬编码JSON方法:

    public string GetJSON() //to be replaced after testing
    {
        string json = @"{
        'name': 'Trial 11.7',
        'id': 2599,
        'version': '11.7',
        'product_id': '1040',
        'time_of_execution': '2017-08-07T22:15:38.000Z',
        'site_url': 'http://something.com/',
        'mc_gem': '11.7',
        'suite_gem': '11.7',
        'passing_percentage': 95.65,
        'failing_percentage': 4.35
        }";

        return json;
    }

模特:

public class TheViewModel
{
    public class RootObject
    {
        public string name { get; set; }
        public int id { get; set; }
        public string version { get; set; }
        public string product_id { get; set; }
        public string time_of_execution { get; set; }
        public string site_url { get; set; }
        public string mc_gem { get; set; }
        public string suite_gem { get; set; }
    }
}

问题是当我单步执行代码时,我得到以下值:

    jObject {Master.Project.Mvc.Models.TheViewModel}    Master.Project.Mvc.Models.TheViewModel

由于某种原因,我没有将JSON反序列化到对象中。它可能很简单,但我没有看到它。

我没有收到任何错误消息,以帮助确定控制器内部的问题。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您正在尝试将JSON转换为TheViewModel类型的对象,因为它正在寻找RootObject

的类型

您可以通过将RootObject中的所有字段移出TheViewModel或通过调用...DeserializeObject<TheViewMode.RootObject>(respon‌​seStr);

来解决此问题

答案 1 :(得分:1)

重构你的代码,将'RootObject'类提取到它自己的文件中(或移动它以便它没有在类下定义。)将解决问题。