在wcf中,在DataMember
属性上应用属性有 什么区别
private int m_SomeValue; [DataMember] public int SomeValue { get {...} set {...} }
而不是成员变量
[DataMember] private int m_SomeValue; public int SomeValue { get {...} set {...} }
?
通常,您应该支持在属性上应用DataMember属性,而不是在私有字段上应用.将属性应用于字段的唯一原因是该属性是否为只读(即它没有setter).
只要您使用Name
标记,无论是使用字段还是属性,合同都是相同的.
[DataMember(Name="SomeValue")] private int m_SomeValue;
但是,访问私有成员可能存在一些权限问题,特别是在Silverlight和CF上 - 在这种情况下,我建议使用公共属性作为数据成员.实际上,除非我有充分的理由,否则我会倾向于总是使用房产......
您可能希望将字段而不是属性标记为DataMember,这是有充分理由的.
请查看此更多详细信息:http://blog.walteralmeida.com/2010/05/wcf-and-datacontract-serialization-internals-and-tips-.html
顺便说一下:只有在完全信任环境中运行时, ContractSerializers才会序列化任何具有DataMemberAttribute的私有字段.不能部分信任(请查看上面列出的博客以获得解决方案)