我正在尝试从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)的内容。两者都有相同的内容:
这就是全部。虽然这些值是正确的,但文件中的更多数据还没有被提取。但我没有警告也没有例外。
不可否认,我对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);
}