【发布时间】:2012-06-09 08:48:28
【问题描述】:
我正在尝试从 aspx 页面调用 Web 服务。 Web 服务返回 json。我需要反序列化 json 对象。
我试图提取字符串,它的形式是:
"{ \" d \" : [ { \" _type \" : \" Myclass:#serviceName \", ....other members..}, { ..other records ... }, {...} ] }"
我的代码如下:
Stream receivedStream = HttpWResp.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader reader = new StreamReader(receivedStream, encode);
string text = reader.ReadToEnd(); // text shows the above string
请帮助我下一步该怎么做。参考一些关于该主题的好文章也会有所帮助。
谢谢
【问题讨论】:
-
使用 JavascriptSerializer.Deserialize
(text) 方法;内置.net框架。奇怪的是,这看起来像是一个从服务器传到页面的字符串,因为它封装了 d 内部的实际数据。如果您将 json 发送回服务器,则不需要 .d -
嗨@frenchie,我已经尝试过JavascriptSerializer.Deserialize 方法,它只返回null。我认为这是由于那个“d”的事情。我什至尝试了 DataContractJsonSerializer 但没有帮助。我不知道如何处理我创建的返回类型类中的“d”。
-
这个json是从哪里来的???例如,如果您使用 $.ajax 从页面发送它,则不应将其封装在 .d 属性中。您是否在代码隐藏文件中调用 Web 服务?你试过 var x = JavascriptSerializer.Deserialize
(text);提取 d 然后 var x2 = JavascriptSerializer.Deserialize - >(x); ??
-
是的,我从代码隐藏 aspx.cs 页面调用它。我试图直接提取为 var x = (list)JavascriptSerializer.Deserialize(text);返回null。我会尝试你提到的东西,然后再回来。谢谢。
-
问题是“var x = (list)JavascriptSerializer.Deserialize(text);”我认为正确的语法涉及一个两步过程,首先将 .d 隔离,然后将其转换为对象模型列表。你能粘贴对象的类定义吗?要反序列化为列表,它是 var x2 = JavascriptSerializer.Deserialize
- >(x);
标签: asp.net json serialization datacontractserializer javascriptserializer