在xml序列化期间未将对象引用设置为对象的实例,并且在加载时选择组合框项目时出现问题

时间:2011-02-24 03:54:44

标签: wpf xml-serialization

问题1.当我的Majorlabel为空时,我有这个问题“对象引用没有设置为对象的实例”,这是在我尝试单击xml序列化后执行保存按钮后发生的。我怎样才能解决这个问题?

private void SaveButton_Click(object sender, RoutedEventArgs e)
{
    string savepath;
    SaveFileDialog DialogSave = new SaveFileDialog();
    // Default file extension
    DialogSave.DefaultExt = "txt";
    // Available file extensions
    DialogSave.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
    // Adds a extension if the user does not
    DialogSave.AddExtension = true;
    // Restores the selected directory, next time
    DialogSave.RestoreDirectory = true;
    // Dialog title
    DialogSave.Title = "Where do you want to save the file?";
    // Startup directory
    DialogSave.InitialDirectory = @"C:/";
    DialogSave.ShowDialog();
    savepath = DialogSave.FileName;
    DialogSave.Dispose();
    DialogSave = null;

    FormSaving abc = new FormSaving();
    if (!string.IsNullOrEmpty(MajorversionresultLabel.Content.ToString()))
    {
        abc.Majorversion = MajorversionresultLabel.Content.ToString();
    }
    abc.Startzbuildfrom = StartzbuildcomboBox.SelectedItem.ToString();

    using (Stream savestream = new FileStream(savepath, FileMode.Create))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
        serializer.Serialize(savestream, abc);
    }
}

根据建议, 这是误差线:

        if (!string.IsNullOrEmpty(MajorversionresultLabel.Content.ToString()))
    {
        abc.Majorversion = MajorversionresultLabel.Content.ToString();
    }

问题2.我使用此行保存我的组合框选择:

abc.Startzbuildfrom = StartzbuildcomboBox.SelectedItem.ToString();

在我的负载中我有这一行:

StartzbuildcomboBox.SelectedItem = abc.Startzbuildfrom

为什么以前不选择组合框选择?

2 个答案:

答案 0 :(得分:1)

首先,我建议在这里只将一个问题放入一个查询中。使其更容易。

对于你的第二个问题,我的猜测是你遇到了引用变量问题。我认为在SelectedItem上调用ToString()方法实际上会创建一个全新的字符串变量。然后,当您尝试稍后设置所选项目时,它无法找到新字符串作为要选择的可能项目,因为即使两个字符串具有相同的值,它们也是不同的对象。我可能会建议您:

1)通过搜索组合框内容来设置所选项目,以查找其值与您保存的字符串相匹配的字符串

2)通过说abc.Startzbuildfrom = StartzbuildcomboBox.SelectedItem保存实际引用。然后从该参考中设置所选项目。

答案 1 :(得分:0)

我怀疑MajorversionresultLabel为null,或者MajorversionresultLabel.Content为null。因此你的陈述

if (!string.IsNullOrEmpty(MajorversionresultLabel.Content.ToString()))

将抛出NullReferenceException。试试这个:

if (MajorversionresultLabel != null && MajorversionresultLabel.Content != null && MajorversionLabel.Content.ToString() != string.Empty)

我打赌你的NullReferenceException会消失。