反序列化嵌套的JSON数据并分配到变量

问题描述:

这里是我反序列化嵌套的JSON数据并分配到变量

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

这里是我的模型JSON数据

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数据,但对如何将其分配到不同的变量完全不知道。

+1

'RootObject jsonResponse = JsonConvert.DeserializeObject (json);'? – AgentFire

我说得对不对在假设你的问题实际上是将结果分配给一个变量?如果是这种情况,你不需要费心计算出这个类型(虽然这里很明显 - 你将一个字符串反序列化成RootObject,所以如果这样做的话,你自然会有一个RootObject)。让编译器为你做:

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

然后你可以将鼠标悬停在“var”上来查看类型。当你真的不知道你在做什么或者该类型是不是像IEnumerable<KeyValuePair<int, List<string>>>那样丑陋的时候,它会更方便。

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

+0

雅,你的假设是正确的,在我反序列化Json文件之后,我能够像“名字”一样分配到一个可变数据和“埃尔森星期一”到另一个变量吗? –

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