将ContractNamespace用于WCF中的命名空间枚举

car*_*mon 4 c# wcf wsdl namespaces

我正在努力为我的C#枚举生成正确的WSDL命名空间,ContractNamespace而不是使用属性装饰每个类型.

以下代码Person在" http://www.mynamespace.co.za/ "中正确生成类型,但出于某种原因Gender在不同的WSDL名称空间中," http://schemas.datacontract.org/2004/07/SomeOtherNamespace ".

我错过了什么?enums需要特殊处理吗?

[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
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的实际代码中,类型存在于外部生成的程序集中.使用自定义属性无法轻松修饰类型.ContractNamespace如果它也适用于枚举,那将是完美的...

换句话说,以下工作,但进入代码生成过程将非常痛苦.

[DataContract(Namespace = "http://www.mynamespace.co.za/")]
public enum Gender
{ 
    [EnumMember]
    Male,
    [EnumMember]
    Female,
    [EnumMember]
    Other
}
Run Code Online (Sandbox Code Playgroud)

bat*_*wad 6

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

[DataContract]
public enum Gender
{ 
    [EnumMember]
    Male,
    [EnumMember]
    Female,
    [EnumMember]
    Other
}
Run Code Online (Sandbox Code Playgroud)

应该看到您的类型出现在您想要的WSDL命名空间中.