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

在 C# 中使用 Newtonsoft 反序列化嵌套的 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);
}