Сериализация бинарного дерева XML атрибутами - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Задача следующая: Есть класс-оболочка над обобщенным бинарным деревом Tree<T> Этот класс является словарем переводов английских слов. Бинарное дерево хранит KeyValuePair<TKey, TValue>:
  • Ключ - английское слово без учёта регистра.
  • Значение Бинарное дерево Tree<KeyValuePair<TKey, TValue>>
    • Ключ - "аббревиатура языка". Например, ru или fr.
    • Значение - список слов, которые соответствуют слову на английском языке.
В итоге получается вот такой тип: Tree<KeyValuePair<string, Tree<KeyValuePair<string, List<string>>>>> KeyValuePair<TKey, TValue>:
Листинг программы
  1. [Serializable]
  2. public class KeyValuePair<TKey, TValue> : IComparable<KeyValuePair<TKey, TValue>>
  3. where TKey : IComparable<TKey>
  4. {
  5. private TKey key;
  6. private TValue value;
  7. private KeyValuePair()
  8. {
  9. }
  10. public KeyValuePair(TKey key, TValue value)
  11. {
  12. Key = key;
  13. Value = value;
  14. }
  15. [XmlAttribute("Key")]
  16. public TKey Key
  17. {
  18. get { return key; }
  19. set { key = value; }
  20. }
  21. [XmlAttribute("Value")]
  22. public TValue Value
  23. {
  24. get { return value; }
  25. set { this.value = value; }
  26. }
  27. public int CompareTo(KeyValuePair<TKey, TValue> other)
  28. {
  29. return Key.CompareTo(other.Key);
  30. }
  31. }
Tree<T>
Листинг программы
  1. public class Tree<T> : IEnumerable, IEnumerable<T>
  2. where T : IComparable<T>
  3. {
  4. private int count;
  5. private Node<T> root;
  6. private IComparer<T> comparer;
  7. public Tree(T data) : this()
  8. {
  9. Root = new Node<T>(data);
  10. Count = 1;
  11. }
  12. * * *
  13. * * *
  14. public int Count
  15. {
  16. get { return count; }
  17. private set { count = value; }
  18. }
  19. [XmlElement("Root")]
  20. public Node<T> Root
  21. {
  22. get { return root; }
  23. private set { root = value; }
  24. }
Node<T>:
Листинг программы
  1. [Serializable]
  2. public class Node<T> : ISerializable
  3. where T : IComparable<T>
  4. {
  5. private T data;
  6. private Node<T> left;
  7. private Node<T> right;
  8. private Node<T> parent;
  9.  
  10. protected Node(SerializationInfo info, StreamingContext context)
  11. {
  12. Data = (T)info.GetValue("Data", typeof(T));
  13. Left = (Node<T>)info.GetValue("Left", typeof(Node<T>));
  14. Right = (Node<T>)info.GetValue("Right", typeof(Node<T>));
  15. Parent = (Node<T>)info.GetValue("Parent", typeof(Node<T>));
  16. }
  17. public Node(T data)
  18. {
  19. Data = data;
  20. }
  21. [XmlElement("Data")]
  22. public T Data
  23. {
  24. get { return data; }
  25. private set { data = value; }
  26. }
  27. [XmlElement("Parent")]
  28. public Node<T> Parent
  29. {
  30. get { return parent; }
  31. set { parent = value; }
  32. }
  33. [XmlElement("Left")]
  34. public Node<T> Left
  35. {
  36. get { return left; }
  37. set { left = value; }
  38. }
  39. [XmlElement("Right")]
  40. public Node<T> Right
  41. {
  42. get { return right; }
  43. set { right = value; }
  44. }
  45. public void GetObjectData(SerializationInfo info, StreamingContext context)
  46. {
  47. info.AddValue("Data", Data);
  48. info.AddValue("Parent", Parent);
  49. info.AddValue("Left", Left);
  50. info.AddValue("Right", Right);
  51. }
  52. }
Помогите пожалуйста правильно расставить атрибуты для сериализации в XML. При вызове следующего метода:
Листинг программы
  1. public void SaveToFile(string path)
  2. {
  3. XmlSerializer format = new XmlSerializer(typeof(EnglishDictionary));
  4. using (Stream fStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
  5. {
  6. format.Serialize(fStream, this);
  7. }
  8. }
Возникает ошибка: An exception of type 'System.InvalidOperationException' occurred in System.Xml.dll but was not handled in user code. Additional information: There was an error generating the XML document.

Решение задачи: «Сериализация бинарного дерева XML атрибутами»

textual
Листинг программы
  1.         public TKey Key
  2.         {
  3.             get { return key; }
  4.             set { key = value; }
  5.         }
  6.  
  7.        
  8.         public TValue Value
  9.         {
  10.             get { return value; }
  11.             set { this.value = value; }
  12.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы