当前位置:  开发笔记 > 前端 > 正文

WCF:属性与成员的DataMember属性

如何解决《WCF:属性与成员的DataMember属性》经验,为你挑选了3个好方法。

在wcf中,在DataMember属性上应用属性有 什么区别

private int m_SomeValue;

[DataMember]  
public int SomeValue {
  get {...}
  set {...}
}

而不是成员变量

[DataMember]  
private int m_SomeValue;

public int SomeValue {
  get {...}
  set {...}
}



1> dthrasher..:

通常,您应该支持在属性上应用DataMember属性,而不是在私有字段上应用.将属性应用于字段的唯一原因是该属性是否为只读(即它没有setter).


如果属性的getter/setter具有可能改变其值的任何代码,那么将DataMemberAttribute放在字段上也很有用.
为什么我们需要这样做呢?
默认情况下,WCF中的所有序列化都是双向的.这意味着框架需要能够读写所有数据元素.因此,如果要将具有只读属性的现有类型修改为可序列化,则可能必须将属性添加到字段中.但这是一种罕见的情况.

2> Marc Gravell..:

只要您使用Name标记,无论是使用字段还是属性,合同都是相同的.

[DataMember(Name="SomeValue")]
private int m_SomeValue;

但是,访问私有成员可能存在一些权限问题,特别是在Silverlight和CF上 - 在这种情况下,我建议使用公共属性作为数据成员.实际上,除非我有充分的理由,否则我会倾向于总是使用房产......



3> 小智..:

您可能希望将字段而不是属性标记为DataMember,这是有充分理由的.

请查看此更多详细信息:http://blog.walteralmeida.com/2010/05/wcf-and-datacontract-serialization-internals-and-tips-.html

顺便说一下:只有在完全信任环境中运行时, ContractSerializers才会序列化任何具有DataMemberAttribute的私有字段.不能部分信任(请查看上面列出的博客以获得解决方案)

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有