【问题标题】:Issues deserializing JSON response反序列化 JSON 响应的问题
【发布时间】:2014-02-15 21:55:25
【问题描述】:

我在调用 API 时收到以下响应(这是意料之中的;它是处理错误查询的功能测试的一部分):

HTTP/1.1 400 错误请求日期:格林威治标准时间 2014 年 1 月 24 日星期五 17:43:39 强制限制信息:api-usage=5/5000 内容类型: application/json;charset=UTF-8 传输编码:分块

16F [{"message":"\nSELECT id, name, description FROM BadObject\n
^\n第 1 行:列:35 处的错误\ns对象类型“BadObject”不是 支持的。如果您尝试使用自定义对象,请务必 在实体名称后附加“__c”。请参考您的 WSDL 或 描述要求适当的 名称。","errorCode":"INVALID_TYPE"}] 0

我正在尝试将其反序列化为以下类:

public class ErrorResponse
{
    public string message;
    public string errorCode;
}

使用以下代码:

var errorResponse = JsonConvert.DeserializeObject<ErrorResponse>(response);

但是,当我尝试反序列化它时,我收到以下错误:

{"无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'Salesforce.Common.Models.ErrorResponse' 因为该类型需要 要反序列化的 JSON 对象(例如 {\"name\":\"value\"}) 正确。\r\n若要修复此错误,请将 JSON 更改为 JSON 对象(例如 {\"name\":\"value\"})或将反序列化类型更改为 实现集合接口的数组或类型(例如 ICollection, IList) 之类的可以从 JSON 反序列化的 List 大批。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。\r\n路径 '',第 1 行,位置 1。"}

我怀疑是 \n (换行符)导致问题。我试过用“\n”替换“\n”,但没有成功。

想法?

【问题讨论】:

    标签: c# json serialization json.net


    【解决方案1】:

    因为 JSON 被方括号括起来,所以它是一个数组。您需要反序列化为一个接受多个条目的对象。例如:

    public class ErrorResponses : List<ErrorResponse> { }
    
    public class ErrorResponse
    {
        public string message;
        public string errorCode;
    }
    

    然后你可以像这样反序列化:

    var errorResponse = JsonConvert.DeserializeObject<ErrorResponses>( json );
    

    【讨论】:

      【解决方案2】:

      如果我理解你所做的,你只需要将它反序列化为 List 而不是 ErrorResponse。

      【讨论】:

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