Ошибка XML при сериализации свойства DictionaryEntry [] - PullRequest
0 голосов
/ 22 марта 2012

Я получаю исключение с сообщением: «В документе XML есть ошибка».

Код:

        private readonly SortedList<string, object> _attributes;

        [XmlArray("Attributes")] 
        [XmlArrayItem("AttributesLine", Type=typeof(DictionaryEntry))] 
        public DictionaryEntry[] _x_Attributes 
        { 
            get 
            { 
                DictionaryEntry[] ret = new DictionaryEntry[_attributes.Count]; 
                int i=0;
                foreach (KeyValuePair<string, object> stuffLine in _attributes)
                {
                    object value = stuffLine.Value;     // <--- float[]         
                    ret[i++] = new DictionaryEntry {Key = stuffLine.Key, Value = value};                
                }
                return ret; 
            }
            set
            {
                _attributes.Clear();
                foreach (DictionaryEntry entry in value)
                {
                    _attributes.Add((string) entry.Key, entry.Value);
                }
            }
        }

Значение каждой пары ключ / значение имеет тип float []. Я все еще хочу, чтобы тип значения оставался 'System.Object', поскольку некоторые ключи могут иметь значения типов, отличных от float [] (В любом случае, я получаю исключение, даже если словарь заполнен одной записью).

Изменить, чтобы уточнить: я использую 'XmlSerializer', который отлично работал при входе. Значение было 'float'.

1 Ответ

0 голосов
/ 22 марта 2012

Я предполагаю, что вы используете XMLSerializer, который не может обрабатывать объекты универсального словаря. Я видел эту ошибку при использовании самих словарей. Вам нужно выбрать один из других сериализаторов, который может их обработать.

Попробуйте взамен DataContractSerializer .

...