繁体   English   中英

数组反序列化不支持类型'SalesforceDataQueryComponent.Utils.SfdcObjects + SfdcCollection

[英]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数组实现ICollectionIEnumerable类型。

根对象SfdcCollection<T> ,尽管其名称,但不是集合或可枚举的对象。 相反,它是不可枚举的通用PO​​CO:

    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, DataContractJsonSerializerJavaScriptSerializer等), 询问有关如何将实际接收的JSON映射到所需类的另一个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM