在 C# 中使用 Newtonsoft 反序列化嵌套的 Json 数据并赋值到变量中
本文关键字:数据 Json 变量 赋值 嵌套 Newtonsoft 反序列化 | 更新日期: 2023-09-27 18:37:07
这是我得到的 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 数据,但完全不知道如何将其分配给不同的变量。
我假设您的问题实际上是将结果分配给变量是否正确?
如果是这种情况,你不需要费心弄清楚类型(尽管这里很明显 - 你正在将字符串反序列化为 RootObject,所以如果这有效,你自然会有一个 RootObject)。只需让编译器为您完成:
var jsonResponse = JsonConvert.DeserializeObject<RootObject>(json);
然后,您可以将鼠标悬停在"var"上以查看类型。当您真的不知道自己在做什么或类型像IEnumerable<KeyValuePair<int, List<string>>>
这样相当丑陋时,它会更方便。
在这种情况下避免使用动态类型;总是喜欢放置实际类型或"var"。如果您将其存储在动态中,编译器不知道您得到了什么,因此如果您以不适当的方式使用对象,它不会发出任何警告,您将面临运行时的后果。
你走在正确的道路上。
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);
}