.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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д