Проблема при сериализации хеш-таблицы с использованием datacontract

Я пытаюсь сериализовать хэш-таблицу, используя ссылку

XML-сериализация хеш-таблицы (C#3.0)

Но я получаю ошибку как

Тип 'WpfApplication3.MyHashtable' с именем контракта данных 'AllMyHashtable: http://schemas.datacontract.org/2004/07/WpfApplication3 ' не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных DataContractSerializer.

Моя программа как под

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MyHashtable ht = new MyHashtable();

            DateTime dt = DateTime.Now;
            for (int i = 0; i < 10; i++)
                ht.Add(dt.AddDays(i), i);
            SerializeToXmlAsFile(typeof(Hashtable), ht); 
        }

        private void SerializeToXmlAsFile(Type targetType, Object targetObject)
        {
            try
            {
                string fileName = @"C:\output.xml";
                DataContractSerializer s = new DataContractSerializer(targetType);
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.IndentChars = ("    ");
                using (XmlWriter w = XmlWriter.Create(fileName, settings))
                {
                    s.WriteObject(w, targetObject);
                    w.Flush();
                }
            }
            catch (Exception ex) { throw ex; }
        }
    }

    [CollectionDataContract(Name = "AllMyHashtable", ItemName = "MyEntry",
                         KeyName = "MyDate", ValueName = "MyValue")] 

    public class MyHashtable : Dictionary<DateTime, int> { }


}

What wrong is hapenning ..please help.

Спасибо

2 ответа

Решение

Причина, по которой вы получаете сообщение об ошибке, заключается в следующем:

SerializeToXmlAsFile(typeof(Hashtable), ht); 

в вашем методе button1_Click вы передаете тип Hashtable. Конструктор DataContractSerializer инициализирует себя для сериализации объекта указанного вами типа, в данном случае Hashtable. Следовательно, когда вы передаете ему объект типа MyHashtable при вызове

s.WriteObject(w, targetObject);

он не знает, как это обрабатывать. Все, что вам нужно сделать, чтобы сделать эту работу, это изменить строку на:

SerializeToXmlAsFile(typeof(MyHashtable), ht);

Я не пытался запустить код моего selft, но в оригинальном сообщении это выглядит как ошибка:

       SerializeToXmlAsFile(typeof(Hashtable), ht);  

Как может работать вышеуказанная линия? ht имеет тип MyHashtable.

Другие вопросы по тегам