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; }
}
}
}
答案 0 :(得分:1)
您的问题中未包含响应JSON,但是从错误消息中,您的问题必须是响应中的根JSON容器是数组。根据{{3}},JSON数组如下所示:
[value1, value2, ..., valueN]
JSON序列化程序映射从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上传到JSON standard,它会自动为您生成类。
如果您必须使用问题中的类,您可以http://json2csharp.com/使用所需的序列化程序(例如Json.NET,DataContractJsonSerializer
,了解如何将实际接收的JSON映射到所需的类。 ,JavaScriptSerializer
或其他等。)