WCF-任何将属性标记为已忽略的方法
本文关键字:方法 记为 任何 属性 WCF- | 更新日期: 2023-09-27 17:58:08
基本上,如果我有以下内容:
[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; }
}
不可能将属性包含在客户端生成的代码中
参考:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ce241118-bc79-4788-a739-c445a52fcd1d
[DataMember]
是序列化引擎的一部分,因此是必需的。您在代理中看到它的原因是代理使用与服务相同的DataContractSerializer
。当IsRequired设置为true
时,代理可以确定发送客户端是否可行(如果设置了所需值)。
从WSDL可以确定是否需要属性,因此DataMemberAttribute
是基于WSDL文件设置的;而不是服务的源代码。默认情况下,代理完全根据网络上可用的服务描述生成。正如其他答案所提到的,你肯定不会将自己的自定义属性复制到代理中。
一种可能性是创建一个接口并将Attribute放置在接口方法上。
您可以查询接口而不是具体类,但是WCF只能看到该类的具体实现。
你可以说:
[DataContract]
public class Foo : IFoo
{
[DataMember(IsRequired = true)]
public int bar { get; set; }
}
public interface IFoo
{
[MyCustomAttribute(...)]
int bar { get; set; }
}