当我尝试序列化我自己的从 ReadOnlyCollection 派生的类时,出现错误:
具有 CollectionDataContractAttribute 属性的类型 'MyReadOnlyCollection`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 是无效的集合类型,因为它没有默认构造函数。
现在错误是有道理的,确实我没有默认构造函数。但是,即使 ReadOnlyCollection 没有无参数的默认构造函数,我也可以使用 DataContractSerializer 序列化 ReadOnlyCollection。
// OK
ReadOnlyCollection<string> readOnlyCollection = new ReadOnlyCollection<string>(new List<string> { "a", "b", "c" });
string result1 = Serialize(readOnlyCollection);
// Throws InvalidDataContractException
MyReadOnlyCollection<string> myReadOnlyCollection = new MyReadOnlyCollection<string>(new List<string> { "a", "b", "c" });
string result2 = Serialize(myReadOnlyCollection);
public static string Serialize(object o)
{
var serializer = new DataContractSerializer(o.GetType());
var stringBuilder = new StringBuilder();
using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder))
{
serializer.WriteObject(xmlWriter, o);
}
return stringBuilder.ToString();
}
[CollectionDataContract]
public class MyReadOnlyCollection<T> : ReadOnlyCollection<T>
{
public MyReadOnlyCollection(IList<T> list) : base(list)
{
}
}
两个问题:
- 为什么我可以序列化 ReadOnlyCollection 而不是我的派生类?
- 我应该如何正确序列化我的派生类?
更新: 我在上面添加了我的派生类