Сериализация формы C # в XML - PullRequest
2 голосов
/ 17 июня 2011

Я создал форму информации о клиенте и привязал текстовые поля к свойствам в классе формы.Эта простая форма имеет 10 текстовых полей в форме, которые привязаны к свойствам в форме

  • Имя клиента
  • PhonePrimary.phoneNumber
  • PhonePrimary.phoneType
  • PhonePrimary.TextMessageOK
  • PhoneDaytime.phoneNumber
  • PhoneDaytime.phoneType
  • PhoneDaytime.TextMessageOK
  • PhoneEvening.phoneNumber
  • PhoneEvening.TextMessageOK

После того, как эти значения были заполнены, я хотел бы создать файл XML, чтобы сохранить эти значения, чтобы их можно было получить позднее.

using System;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;

namespace SimpleCustomerInfo
{
    public partial class CustomerInfoForm : Form
    {
        CustomerInfo ci;

        public CustomerInfoForm()
        {
            InitializeComponent();
            ci = new CustomerInfo();

        }

        private void btnSave_Click(object sender, EventArgs e)
        {

            XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfoForm));
            TextWriter textWriter = new StreamWriter(@"C:\testme.xml");
            serializer.Serialize(textWriter, ci);
            textWriter.Close();
        }

        public partial class CustomerInfo
        {
            public string CustomerName { get; set; }
            public PhoneInfo PhonePrimary { get; set; }
            public PhoneInfo PhoneDays { get; set; }
            public PhoneInfo PhoneEvening { get; set; }
        }

        public class PhoneInfo
        {
            public string number { get; set; }
            public string type { get; set; }
            public bool textOk { get; set; }
        }

    }


}

Когда форма заполнена и нажата кнопка сохранения, и генерируется ошибка.Самая внутренняя ошибка исключения: {"Невозможно сериализовать член System.ComponentModel.Component.Site типа System.ComponentModel.ISite, потому что это интерфейс."} Данные: {System.Collections.ListDictionaryInternal}

IБуду признателен за предложения, которые помогут устранить эту ошибку, или за предложения по другому подходу к сохранению и извлечению введенных данных.

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

Кажется, вы пропустили атрибут Сериализуемый . Пожалуйста, проверь это. Также помимо уже предложенных решений вы можете рассмотреть возможность использования SoapFormatter и BinaryFormatter .

2 голосов
/ 17 июня 2011

Вы сохраняете неправильный класс. Попробуйте:

XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfo));
1 голос
/ 17 июня 2011

Почему вы пытаетесь сериализовать CustomerInfoForm?

Разве вы не хотите сериализовать CustomerInfo?

Я бы использовал DataContractSerializer вместо XmlSerializer. Он более гибкий и более современный (по крайней мере, я так думаю).

var serializer = new DataContractSerializer(typeof(CustomerInfo));

Этот тип сериализатора доступен с .Net 3.0, попробуйте, если вы используете эту версию или более позднюю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...