将对象从json反序列化为类的最佳方法是什么?

时间:2019-05-16 15:33:51

标签: c# json object httpclient

我正在通过使用网络服务api实现GPS跟踪系统。

错误:

  

Newtonsoft.Json.dll中发生了类型为'Newtonsoft.Json.JsonSerializationException'的未处理异常

     

其他信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型'TrackingRequest.Devices',因为该类型需要JSON对象(例如{“ name”:“ value”})来反序列化正确。

     

要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如可以从JSON数组反序列化的列表。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。

这是使用Newtonsoft的json在{#1}}中使用c#的Web表单应用程序。

我的代码

HttpClient

我的课:

using (HttpClient clientKey = new HttpClient())
                   {
                        clientKey.BaseAddress = new Uri("http://api.trackingdiary.com/");
                        clientKey.DefaultRequestHeaders.Add("Hive-Session", key);
                        clientKey.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        HttpResponseMessage responseKey = clientKey.GetAsync("/v2/geo/devices/list").Result;
                        using (HttpContent contentkey = responseKey.Content)
                       {
                            Task<string> resultKey = contentkey.ReadAsStringAsync();
                            Devices obj = JsonConvert.DeserializeObject<Devices>(resultKey.Result);

                           Console.WriteLine();
                       }
                   }

我希望对象在DataTable中执行。

JSON示例 JSON EXAMPLE

1 个答案:

答案 0 :(得分:2)

您的JSON字符串似乎包含所讨论类型的对象数组。您正在尝试将其反序列化为单个实例,因此会出现错误。

尝试一下:

flattened_list = []
x = [[name] + prices for name,prices in population_data]
for inner_list in x:
    flattened_list.extend(inner_list)

print(flattened_list)

并且请将该类重命名为单数,因为它似乎代表单个IEnumerable<Devices> devices = JsonConvert.DeserializeObject<IEnumerable<Devices>>(resultKey.Result);