解决JSON响应的问题

时间:2014-01-24 19:11:58

标签: c# json serialization json.net

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

  

HTTP / 1.1 400错误请求日期:2014年1月24日星期五17:43:39 GMT   Sforce-Limit-Info:api-usage = 5/5000内容类型:   application / json; charset = UTF-8 Transfer-Encoding:chunked

     

16F [{“message”:“\ nSELECT id,name,description FROM BadObject \ n
  行中的^ \ nERROR:1:列:35 \ nsObject类型'BadObject'不是   支持的。如果您尝试使用自定义对象,请务必使用   在实体名称后附加'__c'。请参考您的WSDL或   描述适当的呼吁   names。“,”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'因为类型需要a   要反序列化的JSON对象(例如{\“name \”:\“value \”})   正确。\ r \ n要修复此错误,请将JSON更改为JSON   object(例如{\“name \”:\“value \”})或将反序列化类型更改为   实现集合接口的数组或类型(例如,   ICollection,IList)就像可以从JSON反序列化的List一样   阵列。 JsonArrayAttribute也可以添加到类型中以强制它   从JSON数组反序列化。\ r \ n路径'',第1行,第1位。“}

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

思想?

2 个答案:

答案 0 :(得分:1)

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

public class ErrorResponses : List<ErrorResponse> { }

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

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

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

答案 1 :(得分:0)

如果我很清楚你做了什么,你只需要将它反序列化为List&lt; ErrorResponse&gt;而不是ErrorResponse。