2009-11-03 68 views
1

我在WCF中實現了一個通用的restful api。我需要訪問從JSON反序列化的通用對象(作爲POST操作的參數)。我正在使用原始編程模型來允許對返回格式進行精細控制。例如:WCF - Rest和JSON操作參數

// Create 
[OperationContract(Name = "CreateJSON")] 
[WebInvoke(UriTemplate = "{endpointName}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
Stream Create(Object input, String endpointName); 

在上面的示例中,通用對象由參數'input'給出,我希望它是POST有效負載。類似的調用適用於針對xml的端點,但不適用於JSON。

任何想法/援助將不勝感激。任何人?

回答

1

有一個命名空間System.Runtime.Serialization.Json

要序列通用的對象,你可以這樣做:

/// Object to Json 
let internal json<'t> (myObj:'t) = 
     use ms = new MemoryStream() 
     (new DataContractJsonSerializer(typeof<'t>)).WriteObject(ms, myObj) 
     Encoding.Default.GetString(ms.ToArray()) 

...

/// Object from Json 
let internal unjson<'t> (jsonString:string) : 't = 
     use ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(jsonString)) 
     let obj = (new DataContractJsonSerializer(typeof<'t>)).ReadObject(ms) 
     obj :?> 't 

我希望F#好的... ;-)