在 WCF 中使用 ContractNamespace 为枚举添加命名空间
本文关键字:枚举 添加 命名空间 ContractNamespace WCF | 更新日期: 2023-09-27 18:20:17
我正在努力使用 ContractNamespace
为 C# 枚举生成正确的 WSDL 命名空间,而不是用属性装饰每个类型。
下面的代码在"http://www.mynamespace.co.za/"中正确生成Person
类型,但由于某种原因,Gender
位于不同的 WSDL 命名空间"http://schemas.datacontract.org/2004/07/SomeOtherNamespace"中。
我错过了什么?枚举需要特殊处理吗?
[assembly: ContractNamespace("http://www.mynamespace.co.za/", ClrNamespace = "SomeOtherNamespace")]
namespace SomeOtherNamespace
{
public class Person
{
public int Age { get; set; }
public Gender Gender { get; set; }
}
public enum Gender
{
Male,
Female,
Other
}
}
在我的实际代码中,类型位于生成的外部程序集中。不能轻易地使用自定义属性修饰这些类型。 如果它也适用于枚举,ContractNamespace
那就完美了......
换句话说,以下方法有效,但进入代码生成过程将非常痛苦。
[DataContract(Namespace = "http://www.mynamespace.co.za/")]
public enum Gender
{
[EnumMember]
Male,
[EnumMember]
Female,
[EnumMember]
Other
}
枚举是一种痛苦。 必须修饰枚举才能使 ContractNamespace
属性生效。
[DataContract]
public enum Gender
{
[EnumMember]
Male,
[EnumMember]
Female,
[EnumMember]
Other
}
应该看到您的类型出现在所需的 WSDL 命名空间中。
这些链接可能会对您有所帮助
- 如何:导入自定义 WSDL
- WCF 扩展性 – WSDL 导入(和代码生成(扩展