小编use*_*508的帖子

如何在WCF中传递json字符串并反序列化

我有一个 json 字符串

json1 = "{\"Shops\":[{\"id\":\"1\",\"title\":\"AAA\"},{\"id\":\"2\",\"title\":\"BBB\"}],\"movies\":[{\"id\":\"1\",\"title\":\"Sherlock\"},{\"id\":\"2\",\"title\":\"The Matrix\"}]}";
Run Code Online (Sandbox Code Playgroud)

想要反序列化并获取 requestcollection 类中的两个类商店和电影中的值。

 [WebInvoke(
               Method = "POST",
               UriTemplate = "SubmitRequest",
               RequestFormat = WebMessageFormat.Json,
               ResponseFormat = WebMessageFormat.Json
               )
        ]
  string SubmitRequest(string RequestDetailsjson);
Run Code Online (Sandbox Code Playgroud)

并在service.cs中

JavaScriptSerializer serializer = new JavaScriptSerializer();
            RequestDetailsCollection requestdetailscoll = serializer.Deserialize<RequestDetailsCollection>(RequestDetailsjson);
Run Code Online (Sandbox Code Playgroud)

出现错误

服务器在处理请求时遇到错误。异常消息是“反序列化 System.String 类型的对象时出错”。预计名称空间“”中的结束元素“根”。从命名空间“.”中找到元素“request”。有关更多详细信息,请参阅服务器日志。异常堆栈跟踪是:

我将参数类型更改为stream

string SubmitRequest(Stream RequestDetailsjson);
Run Code Online (Sandbox Code Playgroud)

并更改了代码

StreamReader sr = new StreamReader(RequestDetailsjson);
JavaScriptSerializer serializer = new JavaScriptSerializer();
RequestDetailsCollection requestdetailscoll = (RequestDetailsCollection)serializer.DeserializeObject(sr.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

并出现错误

服务器在处理请求时遇到错误。异常消息是“操作‘SubmitRequest’的传入消息(命名空间‘ http://tempuri.org/ ’的合约‘IService1 ’)包含无法识别的http正文格式值‘Json’。预期的正文格式值为“Raw”。这可能是因为尚未在绑定上配置 WebContentTypeMapper。有关更多详细信息,请参阅 WebContentTypeMapper 的文档。有关更多详细信息,请参阅服务器日志。异常堆栈跟踪是:

帮我解决这个问题

c# wcf serialization json json-deserialization

3
推荐指数
1
解决办法
3007
查看次数

标签 统计

c# ×1

json ×1

json-deserialization ×1

serialization ×1

wcf ×1