Ссылка на объект не установлена ​​на экземпляр объекта во время сериализации xml и проблема с выбором элемента списка при загрузке - PullRequest
0 голосов
/ 24 февраля 2011

вопрос 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 ]

1 голос
/ 24 февраля 2011

В качестве первого замечания, я бы рекомендовал помещать здесь только один вопрос в один запрос. Облегчает.

Что касается вашего второго вопроса, я предполагаю, что вы столкнулись с проблемой ссылочной переменной. Я думаю, что вызов метода ToString () для SelectedItem фактически создает совершенно новую строковую переменную. Затем, когда вы попытаетесь установить выбранный элемент позже, он не сможет найти новую строку как возможный элемент для выбора, потому что, хотя две строки имеют одинаковое значение, они являются разными объектами. Возможно, я бы порекомендовал вам либо:

1) Установите выбранный элемент, выполнив поиск по содержимому поля со списком, чтобы найти строку, значение которой соответствует сохраненному вами

или

2) Сохраните фактическую ссылку, сказав abc.Startzbuildfrom = StartzbuildcomboBox.SelectedItem. Затем установите выбранный элемент из этой ссылки.

0 голосов
/ 24 февраля 2011

Я подозреваю, что MajorversionresultLabel имеет значение null или MajorversionresultLabel.Content имеет значение null. Таким образом ваше заявление

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

выдаст исключение NullReferenceException. Попробуйте вместо этого:

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

Бьюсь об заклад, ваше исключение NullReferenceException исчезнет.

...