[英]Type 'SalesforceDataQueryComponent.Utils.SfdcObjects+SfdcCollection is not supported for deserialization of an array
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
// Deserialize the response to get an array of CUSTOM Cases
var reportsList = jsSerializer.Deserialize<SfdcObjects.SfdcCollection<SfdcObjects.Assets>>(HttpUtility.UrlDecode(response));
引发异常:
错误:System.InvalidOperationException:类型'SalesforceDataQueryComponent.Utils.SfdcObjects + SfdcCollection`1 [[SalesforceDataQueryComponent.Utils.SfdcObjects + Assets,SalesforceDataQueryComponent,Version = 1.2.0.0,Culture = neutral]]'不支持数组反序列化。
我无法弄清楚问题所在:
对象:
namespace SalesforceDataQueryComponent.Utils
{
class SfdcObjects
{
// Used for Authentication
public class TokenResponse
{
public string id { get; set; }
public string issued_at { get; set; }
public string refresh_token { get; set; }
public string instance_url { get; set; }
public string signature { get; set; }
public string access_token { get; set; }
}
// All classes shown next are used to parse the HttpGet Response
public class SfdcCollection<T>
{
public bool Done { get; set; }
public int Size { get; set; }
public string NextRecordsUrl { get; set; }
public List<T> Records { get; set; }
}
public class SfdcAttributes
{
public string Type { get; set; }
public string Url { get; set; }
}
public class Accounts : Account
{
public SfdcAttributes Attributes { get; set; }
}
public class Assets : Asset
{
public SfdcAttributes Attributes { get; set; }
}
public class CustomAssets : Assets
{
public string StringInstallDate { get; set; }
}
public class Users : User
{
public SfdcAttributes Attributes { get; set; }
}
public class CustomCase : Case
{
public string StringCreatedDate { get; set; }
}
public class CustomCases : CustomCase
{
public SfdcAttributes Attributes { get; set; }
}
}
}
您没有在问题中包括响应JSON,但是从错误消息中可以看到,您的问题必须是响应中的根JSON容器是array 。 根据JSON标准 ,JSON数组如下所示:
[value1, value2, ..., valueN]
JSON序列化器映射从JSON数组实现ICollection
或IEnumerable
类型。
根对象SfdcCollection<T>
,尽管其名称,但不是集合或可枚举的对象。 相反,它是不可枚举的通用POCO:
public class SfdcCollection<T> // No IEnumerable<T>
{
public bool Done { get; set; }
public int Size { get; set; }
public string NextRecordsUrl { get; set; }
public List<T> Records { get; set; }
}
因此,序列化程序会将其映射到JSON 对象 (它是一组键/值对,看起来像{"name1" : value1, "name2" : value2, ..., "nameN" : valueN }
),而不是数组。
您需要将数据模型更新为实际收到的JSON。 尝试将JSON上传到http://json2csharp.com/ ,它将自动为您生成类。
如果必须使用问题中的类,则可以使用所需的序列化程序(例如Json.NET, DataContractJsonSerializer
, JavaScriptSerializer
等), 询问有关如何将实际接收的JSON映射到所需类的另一个问题 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.