2017-02-16 63 views
0

我的WCF接口看起來是這樣的:與DataContract名稱重命名WCF泛型類屬性

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    Foo<String>[] Test(); 
} 

Foo<T>類看起來是這樣的:

[DataContract(Name = "FooOf{0}")] 
public class Foo<T> 
{ 
    public T Value { get; set; } 
} 

我發佈的WCF服務,並添加服務引用到我的客戶端代碼,然後我使用這種方法是這樣的:

var client = new ServiceClient(new BasicHttpBinding(), new EndpointAddress(@"http://myServer:port/Service.svc")); 
FooOfString[] result = client.Test(); 

但是,我不能acc ESS生成的類的屬性,例如,我不能做到這一點:

var value = result[0].Value; // cannot access property, does not compile 

我能夠通過刪除我Foo<T>類的[DataContract(Name = "FooOf{0}")]部分做同樣的事情,我可以訪問屬性,問題是生成的類的名稱,它更改爲FooOfStringCHtiIp13,看起來很醜,我試圖將它重命名爲更易讀。此操作,但是,現在工作:

FooOfStringCHtiIp13[] result = client.Test(); 
var value = result[0].Value; // can access, compiles 

感覺就像一些沒有被序列化,我無法正常使用此。任何想法如何正確實現這一點?

+0

'FooOf {0}'格式生成的類名'FooOfT',其中'T'在我的情況'酒吧' – Peroxy

+1

嘗試將DataMember屬性添加到Value屬性? – Joe

+0

我剛剛試過,因爲你寫你的評論..這是問題 – Peroxy

回答

0

解決我的問題,這個問題是在我Foo<T>類的Value財產,我不得不添加DataMemberAttribute到我的財產:

[DataContract(Name = "FooOf{0}")] 
public class Foo<T> 
{ 
    [DataMemberAttribute(Name = "Value")] 
    public T Value { get; set; } 
}