Json.Net反序列化对象给我空对象

时间:2014-04-02 10:25:16

标签: c# json.net

我正在尝试反序列化这个json字符串:

{"PatientData":[
  {
    "device": {
      "serial": "M01106798",
      "manufacturer": "Nipro",
      "model": "TrueResult",
      "first_value_at": "2010-07-17T22:39:00",
      "last_value_at": "2010-09-30T11:18:00",
      "supports_glucose": "no",
      "supports_cgm": "no",
      "supports_insulin": "no",
      "supports_carb": "no"
    },
    "data": []
  },
  {
    "device": {
      "serial": "59-50889-10",
      "manufacturer": "Animas",
      "model": "IR1200",
      "first_value_at": "2014-02-07T11:46:00",
      "last_value_at": "2014-03-27T10:38:00",
      "supports_glucose": "no",
      "supports_cgm": "no",
      "supports_insulin": "no",
      "supports_carb": "no"
    },
    "data": [      
      {
        "type": "insulin_bolus",
        "created_at": "2014-02-07T23:42:00",
        "unit": "U",
        "total_value": 0.9,
        "spike_value": 0.9,
        "flags": [
          {
            "flag": 1008,
            "description": "Bolus inactive"
          }
        ]
      },
      {
        "type": "insulin_basal",
        "created_at": "2014-02-08T00:01:00",
        "value": 0.175,
        "unit": "U/h",
        "flags": []
      },
      {
        "type": "insulin_basal",
        "created_at": "2014-02-08T05:01:00",
        "value": 0.225,
        "unit": "U/h",
        "flags": []
      },
      {
        "type": "insulin_bolus",
        "created_at": "2014-02-08T07:42:00",
        "unit": "U",
        "total_value": 2.6,
        "duration": 1800,
        "flags": []
      },
      {
        "type": "insulin_bolus",
        "created_at": "2014-02-08T09:38:00",
        "unit": "U",
        "total_value": 0.3,
        "spike_value": 0.3,
        "flags": [
          {
            "flag": 1008,
            "description": "Bolus inactive"
          }
        ]
      },    
      {
        "type": "glucose",
        "created_at": "2014-03-27T12:55:18",
        "value": 33.167,
        "unit": "mmol/l",
        "flags": []
      }
    ]
  }
]}

使用json2csharp生成的类,如下所示

public class ObjPatientData
    {
        public class Device
        {
            public string serial { get; set; }
            public string manufacturer { get; set; }
            public string model { get; set; }
            public string first_value_at { get; set; }
            public string last_value_at { get; set; }
            public string supports_glucose { get; set; }
            public string supports_cgm { get; set; }
            public string supports_insulin { get; set; }
            public string supports_carb { get; set; }
        }

        public class PatientData
        {
            public Device device { get; set; }
            public List<object> data { get; set; }
        }

        public class RootObject
        {
            public List<PatientData> PatientData { get; set; }
        }

    }

并将其称为:

LPatientData = new List<ObjPatientData.RootObject>();
LPatientData = JsonConvert.DeserializeObject<List<ObjPatientData.RootObject>>(Json);

但我得到一个空对象列表;任何帮助将不胜感激。

谢谢! 请注意

2 个答案:

答案 0 :(得分:1)

基于以上课程,我通过返回&#34; PatientData&#34;的列表解决了这个问题。对象而不是&#34; RootObjects&#34;并以这种方式使用Jarray.Parse(Json):

ObjPatientData.RootObject Root = new ObjPatientData.RootObject();
var jArray = JArray.Parse(Json);
Root.PatientData = jArray.ToObject<List<ObjPatientData.PatientData>>();

答案 1 :(得分:0)

我认为遵循代码会有效。

string json = "{\"PatientData\":[{\"device\": {\"serial\":    \"M01106798\",\"manufacturer\": \"Nipro\",\"model\": \"TrueResult\",\"first_value_at\": \"2010-07-17T22:39:00\",\"last_value_at\": \"2010-09-30T11:18:00\",\"supports_glucose\": \"no\",\"supports_cgm\": \"no\",\"supports_insulin\": \"no\",\"supports_carb\": \"no\"},\"data\": []},{\"device\": {\"serial\": \"59-50889-10\",\"manufacturer\": \"Animas\",\"model\": \"IR1200\",\"first_value_at\": \"2014-02-07T11:46:00\",\"last_value_at\": \"2014-03-27T10:38:00\",\"supports_glucose\": \"no\",\"supports_cgm\": \"no\",\"supports_insulin\": \"no\",\"supports_carb\": \"no\"},\"data\": [      {\"type\": \"insulin_bolus\",\"created_at\": \"2014-02-07T23:42:00\",\"unit\": \"U\",\"total_value\": 0.9,\"spike_value\": 0.9,\"flags\": [{\"flag\": 1008,\"description\": \"Bolus inactive\"}]},{\"type\": \"insulin_basal\",\"created_at\": \"2014-02-08T00:01:00\",\"value\": 0.175,\"unit\": \"U/h\",\"flags\": []},{\"type\": \"insulin_basal\",\"created_at\": \"2014-02-08T05:01:00\",\"value\": 0.225,\"unit\": \"U/h\",\"flags\": []},{\"type\": \"insulin_bolus\",\"created_at\": \"2014-02-08T07:42:00\",\"unit\": \"U\",\"total_value\": 2.6,\"duration\": 1800,\"flags\": []},{\"type\": \"insulin_bolus\",\"created_at\": \"2014-02-08T09:38:00\",\"unit\": \"U\",\"total_value\": 0.3,\"spike_value\": 0.3,\"flags\": [{\"flag\": 1008,\"description\": \"Bolus inactive\"}]},    {\"type\": \"glucose\",\"created_at\": \"2014-03-27T12:55:18\",\"value\": 33.167,\"unit\": \"mmol/l\",\"flags\": []}]}]}";


        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();

        RootObject rootObject = javaScriptSerializer.Deserialize<RootObject>(json);