Wcf - 隐藏属性?

时间:2011-01-17 16:02:45

标签: c# wcf datamember

我有一个看起来有点像这样的课......

[DataContract]
public partial class Area : ModelBase
{
    private String name;
    private Guid floorId;
    private Guid areaTypeId;
    private int assetCount;

    [DataMember] 
    public String Name
    {
        get { return name; }
        set { name = value; }
    }

    [DataMember] 
    public Guid FloorId
    {
        get { return floorId; }
        set { floorId = value; }
    }

    public Guid AreaTypeId
    {
        get { return areaTypeId; }
        set { areaTypeId = value; }
    }
}

....我有一个Wcf服务库,它定义了以下接口...

 IEnumerable<Area> GetSomeStuff(IEnumerable<Area> uploadedAreas);

一切正常,但在我的客户端应用程序(一个紧凑的框架应用程序)中,AreaTypeId属性被暴露?

我认为如果我没有添加[DataMember]属性,客户端就不会看到它?什么不理解???

谢谢,

ETFairfax

2 个答案:

答案 0 :(得分:1)

如果要隐藏客户端中的任何属性,只需将 [IgnoreDataMember] 属性添加到该属性即可。

答案 1 :(得分:0)

如果要在客户端和服务器之间共享类型汇编,除非您关闭从引用的程序集中重用类型(单击代理上的“配置服务引用”),否则它将可见。

如果您不共享程序集,它将不可见,因为类的代码是基于公开的合同生成的(您可以通过打开VS中的显示所有文件然后转到服务代理下的生成文件Reference.cs来查看它)

DataMember是DataContractSerializer的属性,因此,如果您正在共享程序集,则该属性不会在服务器上序列化,也不会在客户端上初始化,但它将是可见的。 Reference