Как сериализовать класс со списком пользовательских объектов? - PullRequest
4 голосов
/ 27 февраля 2011

У меня есть два класса:

namespace Something
{
    [Serializable]
    public class Spec
    {
        public string Name { get; set; }

        [XmlArray]
        public List<Value> Values { get; set; }
    }

    [Serializable]
    public class Value
    {
        public string Name { get; set; }

        public short StartPosition { get; set; }

        public short EndPosition { get; set; }

        public Value(string name, short startPosition, short endPosition)
        {
            Name = name;
            StartPosition = startPosition;
            EndPosition = endPosition;
        }
    }
}

Когда я пытаюсь сериализовать

var spec = new Spec();
spec.Name = "test";
spec.Values = new List<Value> { new Value("testing", 0, 2) };

var xmls = new XmlSerializer(spec.GetType());    
xmls.Serialize(Console.Out, spec);

Я получаю ошибку:

InvalidOperationException

Произошла ошибка при отображении типа 'Something.Spec'

Использование списка string У меня нет проблем.Я пропустил какой-то атрибут?

Ответы [ 2 ]

7 голосов
/ 27 февраля 2011

Класс Value должен иметь конструктор по умолчанию, если вы хотите, чтобы он был сериализуемым. Пример:

public class Value
{
    public string Name { get; set; }
    public short StartPosition { get; set; }
    public short EndPosition { get; set; }
}

Кроме того, атрибут [Serializable] не требуется для сериализации XML, и он полностью игнорируется классом XmlSerializer .

0 голосов
/ 27 февраля 2011

Может ли быть так, что ваш тип Value не имеет конструктора, который можно использовать для создания экземпляра при десериализации?

...