【问题标题】:c# how deserialize json arrayc#如何反序列化json数组
【发布时间】:2014-12-03 11:51:37
【问题描述】:

在 C# 中我收到一个 json 响应:

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
     var result = streamReader.ReadToEnd();
     ...
}

结果的值为:

"[\"[{\\\"retcode\\\":0}]\"]"

现在如果我尝试将其反序列化到我的对象中:

var myobj = js.Deserialize<List<CustomerReturnCode>>(result);

地点:

public class CustomerReturnCode
{
    public string retcode { get; set; }
}

我收到以下错误:

"Cannot convert object of type 'System.String' to type 'CustomerReturnCode'"}

如何反序列化响应类型? (它是一个数组:在这个例子中它只有一项)

【问题讨论】:

  • 我试过 System.Text.RegularExpressions.Regex.Unescape(result);但是当反序列化时出现错误:{“传入的数组无效,','预期。(6):[\”[{\“retcode\”:0}]\“]”}

标签: c# .net httpwebrequest javascriptserializer


【解决方案1】:

您的网络服务正在返回一个数组数组。你不能直接反序列化它,因为 JavascriptSerializer 不知道怎么做。

根据here 的讨论,可以使用自定义 JsonConverter 类,使用 JArray 来完成。

或者我猜如果您有权修改 Web 服务,请将其更改为以不同格式返回对象。

【讨论】:

    【解决方案2】:
       var json="[\"[{\\\"retcode\\\":0}]\"]";
        Dynamic CRC= new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<CustomerReturnCode >(json);
    

    【讨论】:

    • 如果响应包含多个项目? (它是一个数组)
    • 无论如何,您的代码会引发以下错误:类型'CustomerReturnCode'不支持数组的反序列化。"
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2017-10-16
    • 2012-09-20
    • 2021-09-10
    • 2012-06-21
    相关资源
    最近更新 更多