【问题标题】:deserialize json反序列化 json
【发布时间】: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


【解决方案1】:

如果您使用的是较早的 .NET 版本和/或想要更多功能,请查看:

http://json.codeplex.com/

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多