我正在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。
非常感谢任何想法/帮助。任何人吗?
答案 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#可以......; - )