从DTSX文件反序列化SSIS数据

时间:2015-01-28 23:44:48

标签: c# serialization ssis

我正在尝试从SSIS DTSX文件反序列化XML。我找到了我认为需要的XSD文件,可在此处找到:https://msdn.microsoft.com/en-us/library/gg587628%28v=sql.105%29.aspx。我使用xsd2code插件为VS从XSD创建对象。

问题:我可以反序列化到这些对象中,但几乎没有实际数据从DTSX文件中提取。

在下面的代码中,我在Parse_XML()的WriteLine()命令中放置了一个断点,并查看了两个ExecutableTypePackage对象(可执行文件和exec)的内容。两者都有相同的内容:

  • 属性ExecutableType设置为" SSIS.Package.3"
  • Property集合(List< ExecutableTypePackageProperty>)有一个元素;它的Name属性设置为" PackageFormatVersion"和Value属性设置为" 6"。

这就是全部。虽然这些值是正确的,但文件中的更多数据还没有被提取。但我没有警告也没有例外。

不可否认,我对XML没有多少经验,使用序列化方法对我来说是一个新手,但我已经用它们来验证报表文件的XML结构(RDL),并且从未遇到任何问题。这样的问题。现在,我已经在墙上撞了整整两天,我没有取得任何进展。我已经搜索了每一个我能想到的方法来寻找答案,但我找不到其他人有这个问题。

    string file = null;
    public Form1()
    {
        InitializeComponent();
    }

    private void Run_btn_Click(object sender, EventArgs e)
    {
        Parse_XML();
        MessageBox.Show("Done!");
    }

    private void Parse_XML()
    {
        TextReader tr = new StreamReader(file);
        XmlSerializer serializer = new XmlSerializer(typeof(DTSX.ExecutableTypePackage));
        DTSX.ExecutableTypePackage executables = (DTSX.ExecutableTypePackage)serializer.Deserialize(tr);

        DTSX.ExecutableTypePackage exec = DTSX.ExecutableTypePackage.Deserialize(File.ReadAllText(file));

        MessageBox.Show(String.Format("Found {0} executables in package.", exec.Executable.Count));

        Console.WriteLine("Done loading root object.");
    }

    private void File_btn_Click(object sender, EventArgs e)
    {
        int text_size = -1;
        DialogResult result = openFileDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            file = openFileDialog1.FileName;
            try
            {
                string text = File.ReadAllText(file);
                text_size = text.Length;
                File_txtbx.Text = file;
            }
            catch (IOException)
            {
            }
        }
        Console.WriteLine(file);
        Console.WriteLine(text_size);
        Console.WriteLine(result);        
    }

0 个答案:

没有答案