我使用的API返回结果JSON格式如下:
{
"undefined":{
"theresult":{
"back_1s":{
"consumed":1115287.58,
"min_cons":28789,
"max_cons":1086498.58,
"totalobjs":12683,
"totalproces":4298
},
"back_10s":{
"consumed":1115287.58,
"min_cons":28789,
"max_cons":1086498.58,
"totalobjs":12683,
"totalproces":4298
}
}
}
}
我做的第一件事是创建一个C#对象,每个JSON的值都有5个属性。 然后我将JSON字符串反序列化为这个新对象的数组。
但我不知道back_1s
是什么,以及它在C#中代表什么,更不用说theresult
和undefined
。
我认为在没有帮助的情况下我无法对其进行反序列化。
这是我在C#中反序列化的方式
List<NEWOBJECT> gooddata = JsonConvert.DeserializeObject<List<NEWOBJECT>>(jsonstring);
编辑#1:
我在C#中反序列化时出现此错误
Additional information: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'mvcAndrew.Controllers.NEWOBJECT[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
答案 0 :(得分:2)
最简单的方法是从JSON生成C#类: http://json2csharp.com/
如果你反序列化它,请使用生成的RootObject类(或重命名类),这应该可以解决问题。
这将为Back1s / Back10s生成两个类 - 你仍然可以只使用一个类(删除另一个)并编辑相应的“Theresult”类(例如,我将Back1s重命名为BackClass并删除了Back10s类)< / p>
public class Theresult
{
public BackClass back_1s { get; set; }
public BackClass back_10s { get; set; }
}
答案 1 :(得分:1)
您也可以使用Newtonsoft.json。
var files = JObject.Parse(YourJsonHere);
var recList = files.SelectToken("$..theresult").ToList();
foreach (JObject item in recList.Children())
{
string values = item["consumed"].ToString();
// You can get other values here
}
答案 2 :(得分:0)
需要创建一个与返回对象相同的类结构
public class backDetails
{
public double consumed { get; set; }
public double min_cons { get; set; }
public double max_cons { get; set; }
public double totalobjs { get; set; }
public double totalproces { get; set; }
}
public class TheResult
{
public backDetails back_1s { get; set; }
public backDetails back_10s { get; set; }
}
public class MyClass
{
public TheResult theresult { get; set; }
}
然后这将起作用
List<MyClass> gooddata = JsonConvert.DeserializeObject<List<MyClass>>(jsonstring);