Проблема при сериализации хеш-таблицы с использованием datacontract - PullRequest
4 голосов
/ 25 сентября 2010

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

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

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

Введите 'WpfApplication3.MyHashtable' с именем контракта данных 'AllMyHashtable: http://schemas.datacontract.org/2004/07/WpfApplication3' не ожидается.Добавьте любые типы, которые не известны статически, в список известных типов, например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, передаваемых в DataContractSerializer.1015 * 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 ]

1 голос
/ 01 октября 2010

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

SerializeToXmlAsFile(typeof(Hashtable), ht); 

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

s.WriteObject(w, targetObject);

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

SerializeToXmlAsFile(typeof(MyHashtable), ht);
0 голосов
/ 25 сентября 2010

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

       SerializeToXmlAsFile(typeof(Hashtable), ht);  

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

...