System.Runtime.Serialization.InvalidDataContractException:没有属性的set方法

由于错误显示我的属性没有setter,但我不想要一个setter,它应该是readonly。

编辑:让internal的setter。

这仍然可以在程序集中进行设置,但它是一个很好的技巧,当用于位于其他人使用的程序集中的数据对象时效果很好,因为那些使用程序集将无法设置属性,但是各种序列化程序能够。

请记住,WCF需要从其序列化表示(通常是XML)创建对象的实例,如果属性没有setter,则无法分配值。 对象不在客户端和服务器之间传输,而只是序列化表示,因此需要在每一端重建对象。

你的问题有点模糊,但我想这是你正在寻找的答案:

默认序列化仅适用于读写属性,因为如果不设置属性值,则无法对对象进行重新水化。 如果您希望它与只读属性一起使用,则需要自己实现序列化接口,而不是仅添加属性。

假设您正在使用DataContract序列化,我认为最好的选择是实现ISerializable并自己实现这些方法。