如何使用自定义对象列表序列化类?

时间:2011-02-27 18:20:31

标签: c# xml-serialization

我有两个班级:

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 个答案:

答案 0 :(得分:6)

Value类需要具有默认构造函数,如果您希望它可序列化的话。例如:

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

此外,您不需要[Serializable]属性进行XML序列化,XmlSerializer类完全忽略它。

答案 1 :(得分:0)

可能是你的Value类型没有可用于在反序列化时创建实例的构造函数吗?