如何直接反序列化来自web api的json数据

时间:2016-09-01 15:59:15

标签: c# json

我正在尝试直接反序列化来自Web Api的JSON数据。但是它是throwinn错误:

  

无法反序列化当前的JSON对象(例如{“name”:“value”})   进入类型   'System.Collections.Generic.List`1 [TestMvc.Controllers.HomeController + TestJson]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。

我的代码:

  public class TestJson
    {
        public string thing1
        {
            get;
            set;
        }

        public string thing2
        {
            get;
            set;
        }
    }

  using (WebClient wc = new WebClient())
        {
            var json = wc.DownloadString("http://localhost:43560/api/carvalues");

           List <TestJson> exam = new List<TestJson>();

           exam = JsonConvert.DeserializeObject<List<TestJson>>(json);

        }

json数据示例

{"thing1":"first thing","thing2":"second thing"}

我的目标是如何直接反序列化来自WebAPI的数据。我正在使用Newtonsoft.Json进行反序列化。

3 个答案:

答案 0 :(得分:1)

示例json数据表明它只是一个回到响应中的对象,您期望对象的数组/列表。

将webapi修改为返回列表而不是单个对象,它应该解决问题。

答案 1 :(得分:1)

在这种情况下,请使用不带列表

var exam = new TestJson();    
exam = JsonConvert.DeserializeObject<TestJson>(json);

答案 2 :(得分:0)

您的JSON数据需要在数组上,类似这样

"data": [{
    "thing1": "first thing",
    "thing2": "second thing"
}, {
    "thing1": "first thing",
    "thing2": "second thing"
}, {
    "thing1": "first thing",
    "thing2": "second thing"
}]

或者使用普通类,特别是这种情况

exam = JsonConvert.DeserializeObject<TestJson>(json);