在WCF中反序列化JSON

时间:2012-10-06 08:02:01

标签: c# json wcf deserialization

我正在向WCF服务发送包含文件名和base64encoded映像的JSON消息。我不确定如何将其转换回图像,更具体地反序列化返回流。

WCF接口

 [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "/UploadImage", ResponseFormat =  WebMessageFormat.Json,
            RequestFormat =  WebMessageFormat.Json)]
        string UploadImage(Stream image);

消息的某些部分(我保存到文件中,以便我可以查看并尝试理解)

--hr56lXG6Q_hKg5opmTx4xejr28dU17AC
Content-Disposition: form-data; name="entity"

{"filename":"mypicture.jpg","thebigfile":"\/9j\/4Re6RXhpZgAATU0AKgAAAAgACwEPAAIAAAAOAAAAkgEQAAIAAAAGAAAAoAESAAMAAAABAAYAAAEaAAUAAAABAAAApgEbAAUAAAABAAAArgEoAAMAAAABAAIAAAExAAIAAAATAAAAtgEyAAIAAAAUAAAAygITAAMAAAABAAEAAIdpAAQAAAABAAAA3oglAAQAAAABAAACegAAAoBTb255IEVyaWNzc29uAExUMjZpAAAAAEgAAAABAAAASAAAAAE2LjEuQS4yLjQ1XzUzX2YxMDAApDIwMTI6MTA6MDYgMDk6MzI6MTcAABiCmgAF
        and lots more of the base64 encoded image....
        --hr56lXG6Q_hKg5opmTx4xejr28dU17AC--

如何反序列化? Stream是否可行?我不只是想删除顶行然后开始反序列化JSON数组,我想知道为什么它看起来像这样。

1 个答案:

答案 0 :(得分:3)

要处理您提供的消息,OperationContract需要看起来像:

  

[WebInvoke(Method =“POST”,UriTemplate =“/ UploadImage”,BodyStyle = WebMessageBodyStyle.WrappedRequest,ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json)]   [OperationContract的]   string UploadImage(string filename,string thebigfile);

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb885100.aspx

然后,您需要使用.NET Framework提供的解码器手动Base64解码“thebigfile”参数。据我所知,JSON内部没有对Base64的内置支持,有关如何支持各种数据类型的详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb412170.aspx