如何在SSIS脚本组件中不使用Newtonsoft反序列化复杂嵌套JSON
在SSIS脚本组件中不使用Newtonsoft获取嵌套JSON的FirstName和LastName
首先修正你的JSON语法错误(原JSON存在字符串未加引号、对象分隔符缺失等问题),正确的JSON示例如下:
[ {"studentId":"A2336","Name":{"FirstName":"John","LastName":"Doe"}}, {"studentId":"B1470","Name":{"FirstName":"Mary","LastName":"Smith"}} ]
你的Student类已经包含了Name类型的属性,直接通过对象层级访问就能获取嵌套的FirstName和LastName,同时建议增加空值判断避免空引用异常。修改后的代码如下:
public override void CreateNewOutputRows() { string jsonFileContent = File.ReadAllText(@"C:\desktop\sample.json"); JavaScriptSerializer js = new JavaScriptSerializer(); List<Student> allStudents = js.Deserialize<List<Student>>(jsonFileContent); foreach(var student in allStudents) { Output0Buffer.AddRow(); // 输出学生ID System.Windows.Forms.MessageBox.Show($"Student Id is: {student.studentId}"); // 访问嵌套的姓名属性,增加空值判断 if(student.Name != null) { string firstName = student.Name.FirstName; string lastName = student.Name.LastName; // 输出姓名 System.Windows.Forms.MessageBox.Show($"First Name: {firstName}, Last Name: {lastName}"); // 如果Output0Buffer有对应列,可直接赋值 // Output0Buffer.FirstName = firstName; // Output0Buffer.LastName = lastName; } } } public class Student { public string studentId { get; set;} public Name Name { get; set;} } public class Name { public string FirstName { get; set;} public string LastName { get; set;} }
关键说明:
- 因为
Student类的Name属性是Name类型,所以通过student.Name.FirstName和student.Name.LastName可以直接访问嵌套字段。 - 增加
student.Name != null的判断,防止JSON中Name字段缺失或为null时引发空引用异常。 - 如果你的SSIS输出缓冲区(Output0Buffer)定义了
FirstName和LastName列,可直接将对应值赋值给这些列,实现数据输出。
内容的提问来源于stack exchange,提问作者Lazytitan
相关产品推荐
相关产品推荐

