You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:55:38