如何将此JSON转换为C#对象

时间:2018-06-19 05:54:41

标签: c# json

我使用的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#中代表什么,更不用说theresultundefined

我认为在没有帮助的情况下我无法对其进行反序列化。

这是我在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.

3 个答案:

答案 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);