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

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

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

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

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

textual
Листинг программы
        public void BeautySerilize(string filePath, object graph)
        {
            var settings = new XmlWriterSettings
            {
                Indent = true,
                IndentChars = "  ",
                NewLineChars = "\r\n",
                NewLineHandling = NewLineHandling.Replace
            };
 
            using (var fs = new FileStream(filePath, FileMode.Create))
            using (var writer = XmlWriter.Create(fs, settings))
                new DataContractSerializer(graph.GetType()).WriteObject(writer, graph);
        }

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


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

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

15   голосов , оценка 3.867 из 5
Похожие ответы