0

基本上,如果我有以下几点:

[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; }
}
4

3 回答 3

2

无法您的属性包含在客户端生成的代码中

参考:http ://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ce241118-bc79-4788-a739-c445a52fcd1d

于 2011-05-31T17:31:48.720 回答
1

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

从 WSDL 可以确定是否需要某个属性,因此DataMemberAttribute根据 WSDL 文件进行设置;不是服务的源代码。默认情况下,代理完全由网络上可用的服务描述生成。正如其他答案所提到的,您肯定不会将自己的自定义属性复制到代理中。

于 2011-05-31T19:08:25.280 回答
-1

一种可能性是创建一个接口并将属性放置在接口方法上。

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

你可以说:

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

 public interface IFoo 
 {
     [MyCustomAttribute(...)]
     int bar { get; set; } 
 }
于 2011-05-31T17:27:17.197 回答