代码之家  ›  专栏  ›  技术社区  ›  Ibrahim D.

如何将此JSON转换为C对象

  •  -1
  • Ibrahim D.  · 技术社区  · 6 年前

    我使用的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.
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Haefliger    6 年前

    最简单的IST从JSON生成C类: http://json2csharp.com/

    如果反序列化它,请使用生成的rootobject类(或重命名该类),这应该可以做到。

    这将为back1s/back10s生成两个类-您仍然只能使用一个类(删除另一个类)并编辑对应的“theresult”类(例如,我将back1s重命名为backclass并删除back10s类)。

    public class Theresult
    {
        public BackClass back_1s { get; set; }
        public BackClass back_10s { get; set; }
    }
    
        2
  •  1
  •   Prany    6 年前

    也可以使用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
            }
    
        3
  •  0
  •   Diptee Hamdapurkar    6 年前

    需要创建一个与返回对象相同的类结构

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