2011-05-31 36 views
0

基本上,如果我有以下几点:WCF - 将属性标记为忽略的任何方式?

[DataContract] 
public class Foo 
{ 
    [MyCustomAttribute(...)] 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 

我怎样才能得到它,这样当用户生成使用类MyCustomAttribute被忽略“添加服务引用...”

基本上,我不不想在客户端生成的代码的属性上设置该属性。请记住,我还是希望物业本身展现出来,但基本上,客户端应该是这样的......

[DataContract] 
public class Foo 
{ 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 
+2

这应该是“添加服务引用”代理生成器的默认行为。您是否尝试添加服务参考并获得您的自定义属性? – 2011-05-31 17:29:20

+0

我没有尝试,我查看了Reference.cs文件,发现它继承了DataMember(IsRequired = true)等项目,并认为它包含了属性。我想那个属性是重建的,没有结束。 – michael 2011-05-31 19:02:41

回答

-1

一种可能性是创建一个接口和属性放置到接口的方法。

你可以查询接口而不是具体的类,但是WCF只会看到该类的具体实现。

你可以说:

[DataContract] 
public class Foo : IFoo 
{ 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 

public interface IFoo 
{ 
    [MyCustomAttribute(...)] 
    int bar { get; set; } 
} 
+0

我不完全理解这个... – michael 2011-05-31 17:29:26

1

[DataMember]是一部分序列化引擎,因此需要。您在代理中看到的原因是代理使用与服务相同的DataContractSerializer。当IsRequired设置为true时,代理可以确定发送客户端是否可行(如果设置了所需值)。

从WSDL中可以确定是否需要属性,因此DataMemberAttribute是基于WSDL文件设置的;而不是服务的源代码。代理默认由网络上的服务描述完全生成。而作为其他答案提及你一定会而不是得到你自己的自定义属性复制到代理。