C# 将JSON对象转换为动态对象

C# 将JSON对象转换为动态对象,c#,json,json.net,C#,Json,Json.net,我需要在后端使用C#获取JSON对象的值。JSON对象如下所示: { "StudentName": "Michael Lumb", "SubjectCodes": [ "1", "2" ], "Grade": "3"} 我尝试过的代码如下: public string AddStudent(JObject studentData) { dynamic dObject = JObject.Parse(studentData.ToString()); string _stu

我需要在后端使用C#获取JSON对象的值。JSON对象如下所示:

{  "StudentName": "Michael Lumb",  "SubjectCodes": [    "1",    "2"  ],  "Grade": "3"}
我尝试过的代码如下:

public string AddStudent(JObject studentData)
{
 dynamic dObject = JObject.Parse(studentData.ToString());
 string _studentName = dObject.StudentName;//works fine
 string[] _subjectCodes= dObject.SubjectCodes;//gives error 'cannot implicitly convert type....'
}

我的要求是将“SubjectCodes”作为字符串数组。如何实现这一点?

从下载NewtonSoft.dll 它有将数据转换为json文件的方法,反之亦然安装newtonsoft:

Install-Package Newtonsoft.Json
从json转换:

string json = "{ 'StudentName': 'Michael Lumb', 'SubjectCodes': ['1','2'], 'Grade': '3'}";
Student student = JsonConvert.DeserializeObject<Student>(json);
在一篇文章中找到了答案

但您也应该考虑使用强类型对象:

public class Student
{
    public string   StudentName  { get; set; }
    public string[] SubjectCodes { get; set; }
    public int      Grade        { get; set; }
}

...

var student = JsonConvert.DeserializeObject<Student>(json);
Console.WriteLine(student.SubjectCodes[0]);
公共班级学生
{
公共字符串StudentName{get;set;}
公共字符串[]主题代码{get;set;}
公共整数等级{get;set;}
}
...
var student=JsonConvert.DeserializeObject(json);
Console.WriteLine(学生主题代码[0]);

C#是一种强类型语言,在可能的情况下,最好用强类型对象描述您的问题域。通过这种方式,您可以获得强类型的好处:编译时错误、重构等。如果json不正确,则在尝试反序列化时会立即捕获错误,而不是在稍后可能失败的情况下立即发现问题所在。

JObject是NewtonSoft的json.NET+标记提到json.NET。
public class Student
{
    public string   StudentName  { get; set; }
    public string[] SubjectCodes { get; set; }
    public int      Grade        { get; set; }
}

...

var student = JsonConvert.DeserializeObject<Student>(json);
Console.WriteLine(student.SubjectCodes[0]);