2013-11-26 57 views
0

它必須是可序列化的,還是不是?運營合同的退貨需要什麼?

看來,當我使用一個自定義類,我會做這樣的事情:

[OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    IECInstance testme(); 

,並在它的定義:

public IECInstance testme() 
    { 
     IECInstance tst = ...; 
     return tst; 
    } 

我的想法是需要這樣的東西有這種事情會回來。現在它返回一個504超時錯誤。

可能,這個項目不是可序列化的,這是我想到的大問題是問題。

IECInstance接口爲:

public interface IECInstance : 
    IECNamedValueContainer, 
    IECValueContainer, 
    IEnumerable<IECPropertyValue>, 
    IEnumerable, 
    IECDump, 
    ICloneable, 
    IExtendable 
    { 
    ... 
    } 

,我想至少有一個,如果不是更多的項目都是系列化,但接口本身標記顯示在頂部:[序列化][Serializable接口]

是必需的返回類型是什麼?

+0

您需要Serializable屬性應用到您的返回類型。不要忘記,Serializable屬性不是可繼承的,所以如果你將它應用到接口上,那麼它將不起作用。你需要直接將它應用到課堂上。 –

+0

如果該對象不允許被改變,那麼它來自一個DLL? – Fallenreaper

+0

另外,如果您尚未確定已在界面上添加了[ServiceContract]。 – MightyLampshade

回答

1

嘗試使用ServiceKnownTypeAttribute

[OperationContract] 
[WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
[ServiceKnownType(typeof(WhateverYourECInstanceTypeIs))] 
IECInstance testme(); 

,是的具體類型將需要被序列化,像這樣

[DataContract] 
public class WhateverYourECInstanceTypeIs : IECInstance 
{ 
    [DataMember] 
    public int Foo { get; set; } 
} 
+0

啊,所以我猜測基數據類型之外,我將不得不使用數據契約來傳遞數據,因爲這有助於定義或多或少的JSON對象類型? – Fallenreaper

+0

是的。在DataContract之前,在ASMX時代,您會使用該序列化屬性。現在,任何具有DataMembers的DataContract類都可以通過DataContractSerializer或DataContractJsonSerializer序列化爲json/xml。當然,你可以直接使用它們進行序列化,但是在WCF中,你將使用利用相應序列化器的端點行爲。它看起來像你正在嘗試做一個JSON Web服務,也許REST?如果你可以考慮WebAPI。 –

+0

我們正在做相當簡單的RESTful服務,我們可以轉移到WebAPI。問題似乎是IECInstance主要是一個接口,但結構本身是可序列化的,所以我正在努力構建一個WebAPI或RESTful可以使用的結構。 – Fallenreaper