使用C#中的Newtonsoft反序列化嵌套的Json数据并分配到变量中

时间:2016-03-03 09:37:02

标签: c# json

这是我得到的Json数据

{
"Data": {
"namelist": [
  {
    "name": "Elson Mon",
    "Information": {
      "Age": 45.0,
      "Height": 168.7,
      "Weight": 75.4,
      "Birthdate": "1992-03-03"
    },
    "Married Status": "Single"
  }
]
}
}

这是我的模特

public class Information
{
     public double Age { get; set; }
     public double Height { get; set; }
     public double Weight { get; set; }
     public string Birthdate { get; set; }
}

public class Namelist
{
     public string name { get; set; }
     public Information Information { get; set; }
     public string MarriedStatus { get; set; }
}

public class Data
{
     public List<Namelist> namelist { get; set; }
}

public class RootObject
{
     public Data Data { get; set; }
}

如何反序列化Json格式字符串并赋值给变量? 我试图使用

dynamic jsonResponse = JsonConvert.DeserializeObject<RootObject>(json);

反序列化Json数据,但完全不知道如何将它分配到不同的变量中。

2 个答案:

答案 0 :(得分:0)

你走在正确的道路上。

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);

示例:

public static void Main(string[] args)
{
    string json = @"{
                    'Data': {
                    'namelist': [
                      {
                        'name': 'Elson Mon',
                        'Information': {
                          'Age': 45.0,
                          'Height': 168.7,
                          'Weight': 75.4,
                          'Birthdate': '1992-03-03'
                        },
                        'Married Status': 'Single'
                      }
                    ]
                    }
                    }";

    RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
}

答案 1 :(得分:0)

我是否正确地假设您的问题实际上是将结果分配给变量?

如果是这样的话,你不必费心去弄清楚它的类型(虽然这里非常明显 - 你将字符串反序列化为RootObject,所以如果这样做,你自然会有一个RootObject)。让编译器为您完成:

owner.removeTruck(truck);
ownerRepository.save(owner);
truckRepositry.delete(truck);

然后您可以将鼠标悬停在&#34; var&#34;看到类型。当你真的不知道你正在使用什么,或者类型是否像var jsonResponse = JsonConvert.DeserializeObject<RootObject>(json); 那样丑陋时,它会更加方便。

在这种情况下避免使用动态类型;总是喜欢把实际的类型或&#34; var&#34;。如果你将它存储在动态中,编译器不知道你得到了什么,所以如果你以不恰当的方式使用你的对象,它就不会发出任何警告,你&#39 ; ll面对运行时的后果。