2014-09-01 45 views
3

我很努力地使用ContractNamespace爲我的C#枚舉生成正確的WSDL名稱空間,而不是使用屬性裝飾每個類型。在WCF中對名稱空間枚舉使用ContractNamespace

下面的代碼正確地生成「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 
} 

回答

5

枚舉是一種痛苦。您必須裝飾ContractNamespace屬性的枚舉才能生效。

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

應該看到您的類型出現在您想要的WSDL名稱空間中。