我刚刚完成了一些测试,并且我已经设法让ReadAsDataContract处理Response.Content方法......
真正令人困惑的是我认为它不应该工作!由于我的类没有使用DataContact或DataMember属性进行修饰。
我很困惑,阅读网络上的各种教程似乎用DataContract和DataMember属性装饰你的类(用于ReadAsDataContract)是很重要的。
但我的不是,我在调用ReadAsDataContract的行上放了一个断点,果然我有一个带有正确详细信息的LIST。这是行
List<Models.Question> questions = response.Content.ReadAsDataContract<List<Models.Question>>();
Models.Question未使用属性进行修饰。我与我的服务器和客户共享我的模型组件。
有人可以告诉我为什么它可行,据我所知你需要在类和成员上添加属性(我没有)
我正在使用Visual Studio 2010和.NET 4 - 我似乎记得不再需要这些属性 - 这是真的吗?
真的很期待任何帮助。
我讨厌它什么时候工作,他们不应该:-)但当然我也讨厌当它们不应该工作时,他们应该:-)
谢谢!
答案 0 :(得分:3)
有人可以告诉我它为什么会起作用 据我所知你需要添加 类和成员的属性 (我没有)
将[DataContract]放在数据类上的“负担”和要序列化的每个成员的[DataMember]对全世界的程序员来说太过分了 - 所以微软改变了.NET 3.5 SP1中DataContractSerializer的行为。 / p>
从那时起,DCS的行为就像旧的XmlSerializer一样,没有装饰的类 - 它会愉快地序列化所有公共成员和属性。
问题当然是:您放弃了属性为您提供的所有附加控件,例如为数据协定定义XML命名空间,定义数据成员的顺序等等 - 但它可以在不添加任何属性的情况下工作
所以这是一个已知且自愿介绍的行为。我仍然相信你应该明确你的意图并用[DataContract]和你的成员用[DataMember]标记你的数据类(这也使你能够忽略一个或几个公共成员而不包括它们在序列化中)。 / p>
答案 1 :(得分:1)
根据this,所有类型都可以序列化,而不仅仅是具有DataContractAttribute的类型。