.NET 4.x XmlSerializer не сериализует открытые поля - C#

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

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

Т.к. классы, реализующие IDictionary, не серилизуются XmlSerializer (NotSupportedException), то я перевожу словарь Dicitonary<string,double> в массив KeyValuePair<string, double>[]. Свойства Key и Value у этой структуры являются открытыми, но почему-то они не сериализуются.
Листинг программы
  1. [Serializable]
  2. public struct KeyValuePair<TKey, TValue> {
  3. private TKey key;
  4. private TValue value;
  5. public KeyValuePair(TKey key, TValue value) {
  6. this.key = key;
  7. this.value = value;
  8. }
  9. //Открытое свойство Key
  10. public TKey Key {
  11. get { return key; }
  12. }
  13. //Открытое свойство Value
  14. public TValue Value {
  15. get { return value; }
  16. }
  17. public override string ToString() {
  18. StringBuilder s = StringBuilderCache.Acquire();
  19. s.Append('[');
  20. if( Key != null) {
  21. s.Append(Key.ToString());
  22. }
  23. s.Append(", ");
  24. if( Value != null) {
  25. s.Append(Value.ToString());
  26. }
  27. s.Append(']');
  28. return StringBuilderCache.GetStringAndRelease(s);
  29. }
  30. }
Листинг программы
  1. Dictionary<string, double> vals = new Dictionary<string, double>
  2. {
  3. {"Dust2", 3},
  4. {"Mirage", 3},
  5. {"Cache", 3},
  6. {"Inferno", 3},
  7. {"Overpass", 1.5},
  8. {"Cobble", 1.5},
  9. {"Train", 1.5},
  10. {"Nuke", 1.5},
  11. {"Office", 1}
  12. };
  13. private void Run()
  14. {
  15. KeyValuePair<string, double>[] a = vals.ToArray();
  16. XmlSerializer xmlSerializer = new XmlSerializer(a.GetType());
  17. using (var sw = new StreamWriter("settings.xml"))
  18. {
  19. xmlSerializer.Serialize(sw, a);
  20. }
  21. }
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ArrayOfKeyValuePairOfStringDouble xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3. <KeyValuePairOfStringDouble />
  4. <KeyValuePairOfStringDouble />
  5. <KeyValuePairOfStringDouble />
  6. <KeyValuePairOfStringDouble />
  7. <KeyValuePairOfStringDouble />
  8. <KeyValuePairOfStringDouble />
  9. <KeyValuePairOfStringDouble />
  10. <KeyValuePairOfStringDouble />
  11. <KeyValuePairOfStringDouble />
  12. </ArrayOfKeyValuePairOfStringDouble>

Решение задачи: «.NET 4.x XmlSerializer не сериализует открытые поля»

textual
Листинг программы
  1.         public void BeautySerilize(string filePath, object graph)
  2.         {
  3.             var settings = new XmlWriterSettings
  4.             {
  5.                 Indent = true,
  6.                 IndentChars = "  ",
  7.                 NewLineChars = "\r\n",
  8.                 NewLineHandling = NewLineHandling.Replace
  9.             };
  10.  
  11.             using (var fs = new FileStream(filePath, FileMode.Create))
  12.             using (var writer = XmlWriter.Create(fs, settings))
  13.                 new DataContractSerializer(graph.GetType()).WriteObject(writer, graph);
  14.         }

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


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

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

15   голосов , оценка 3.867 из 5

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

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

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