在 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
}

在 WCF 中使用 ContractNamespace 为枚举添加命名空间

枚举是一种痛苦。 必须修饰枚举才能使 ContractNamespace 属性生效。

[DataContract]
public enum Gender
{ 
    [EnumMember]
    Male,
    [EnumMember]
    Female,
    [EnumMember]
    Other
}

应该看到您的类型出现在所需的 WSDL 命名空间中。

这些链接可能会对您有所帮助

  • 如何:导入自定义 WSDL
  • WCF 扩展性 – WSDL 导入(和代码生成(扩展