Silverlight:DataContractSerializer无法处理只读集合属性

Silverlight:DataContractSerializer无法处理只读集合属性,silverlight,serialization,collections,silverlight-4.0,datacontractserializer,Silverlight,Serialization,Collections,Silverlight 4.0,Datacontractserializer,对于我们的Silverlight项目(SL4),我使用的模型可能包含列表(IListIList属性没有公共setter。我们使用正在工作的DataContractSerializer序列化模型。但是当我尝试反序列化时,DataContractSerializer的ReadObject(Stream)会引发SecurityException方法,抱怨由于缺少公共setter而无法设置目标属性(指向IList属性) 由于DataContractSerializer是密封的,既不可扩展也不灵活,因此我

对于我们的Silverlight项目(SL4),我使用的模型可能包含列表(
IList
IList
属性没有公共setter。我们使用正在工作的DataContractSerializer序列化模型。但是当我尝试反序列化时,DataContractSerializer的
ReadObject(Stream)会引发SecurityException
方法,抱怨由于缺少公共setter而无法设置目标属性(指向
IList
属性)

由于
DataContractSerializer
是密封的,既不可扩展也不灵活,因此我目前看不到添加某种附加规则的机会,这些规则允许使用
add()
方法上的foreach循环或传输集合项的其他方法来反序列化
ILists

我还试着深入研究
DataContractSerializer
源代码(使用Reflector)来创建一个小分支,但看起来我必须深入研究,复制整个序列化类似乎不是一个可行的解决方案

您是否看到了另一个使用
DataContractSerializer
在没有公共setter的情况下序列化列表的机会

提前非常感谢您的想法


更新
使用XmlSerializer解决


Thomas使用具体(可变)类型,并为DC提供它想要的


它对我来说效果很好(我通常只在DataContractSerializable类中指定具体类型)。泛型序列化的整个方法是wash,并且附带了cavaets——选择您的方法。或者,使用另一种方法,例如ISerializable(uhg)(无法反序列化接口属性),但(反)序列化ILists项的工作非常有效

对我们来说,唯一的变化是在
[xmlclude]
属性之外添加
[KnownType]
(当然,将
DataContractSerializer.WriteObject(…)
中的几行替换为
XmlSerializer.Serialize(…)

感谢您的支持!=)

谢谢!(我选择了另一种解决方案)