WCF - Rest和JSON操作参数

时间:2009-11-03 14:02:38

标签: c# wcf json rest

我正在WCF中实现一个通用的restful api。我需要访问从JSON反序列化的通用对象(作为POST操作的参数)。我正在使用原始编程模型来允许对返回格式进行细粒度控制。例如:

// 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 个答案:

答案 0 :(得分: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#可以......; - )