我在调用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”,但它没有用。
思想?
答案 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。