Force.com-Toolkit-for-NET icon indicating copy to clipboard operation
Force.com-Toolkit-for-NET copied to clipboard

JsonHttpClient failed to deserialize some resource?

Open Tennyleaz opened this issue 5 years ago • 1 comments

I want to get API limits using List Organization Limits function, and I define my own object like:

public class LimitBase
{
    [JsonProperty(PropertyName = "Max")]
    public int Max { get; set; }
    [JsonProperty(PropertyName = "Remaining")]
    public int Remaining { get; set; }
}

public class DailyApiRequest : LimitBase
{
    [JsonProperty(PropertyName = "Workbench")]
    public LimitBase Workbench { get; set; }
    [JsonProperty(PropertyName = "Salesforce Mobile Dashboards")]
    public LimitBase MobileDashboards { get; set; }
    [JsonProperty(PropertyName = "Salesforce Touch")]
    public LimitBase Touch { get; set; }
}

public class Limit
{
    [JsonProperty(PropertyName = "DailyApiRequests")]
    public DailyApiRequest DailyApiRequests { get; set; }
    [JsonProperty(PropertyName = "DataStorageMB")]
    public LimitBase DataStorageMB { get; set; }
    [JsonProperty(PropertyName = "FileStorageMB")]
    public LimitBase FileStorageMB { get; set; }
}

HTTP get request will return a proper json string, but JsonHttpClient cannot successfully deserialize the string to my Limit class. I found JsonConvert.DeserializeObject<T>(jObject.ToString()); in JsonHttpClient.cs line 55 is returning null.

If I copy the response string and manually convert it like:

Limit limit = JsonConvert.DeserializeObject<Limit>(resopnseString);

The deserialization will always success. How can we improve/fix the built in JsonHttpClient class?

Tennyleaz avatar Apr 23 '19 07:04 Tennyleaz

`

public class LimitBase
{
    public int Max { get; set; }
    public int Remaining { get; set; }
}

public class ConcurrentAsyncGetReportInstances : LimitBase
{
}

public class ConcurrentSyncReportRuns : LimitBase
{
}

public class DailyApiRequests : LimitBase
{
}

public class DailyAsyncApexExecutions : LimitBase
{
}

public class DailyBulkApiRequests : LimitBase
{
}

public class DailyDurableGenericStreamingApiEvents : LimitBase
{
}

public class DailyDurableStreamingApiEvents : LimitBase
{
}

public class DailyGenericStreamingApiEvents : LimitBase
{
}
public class DailyStandardVolumePlatformEvents : LimitBase
{
}

public class DailyStreamingApiEvents : LimitBase
{
}
public class DailyWorkflowEmails : LimitBase
{
}

public class DataStorageMB : LimitBase
{
}

public class DurableStreamingApiConcurrentClients : LimitBase
{
}

public class FileStorageMB : LimitBase
{
}

public class HourlyAsyncReportRuns : LimitBase
{
}

public class HourlyDashboardRefreshes : LimitBase
{
}

public class HourlyDashboardResults : LimitBase
{
}

public class HourlyDashboardStatuses : LimitBase
{
}

public class HourlyLongTermIdMapping : LimitBase
{
}

public class HourlyODataCallout : LimitBase
{
}
public class HourlyShortTermIdMapping : LimitBase
{
}

public class HourlySyncReportRuns : LimitBase
{
}

public class HourlyTimeBasedWorkflow : LimitBase
{
}

public class MassEmail : LimitBase
{
}

public class MonthlyPlatformEvents : LimitBase
{
}

public class SingleEmail : LimitBase
{
}

public class RootObjectLimitBase
{
    public ConcurrentAsyncGetReportInstances ConcurrentAsyncGetReportInstances { get; set; }
    public ConcurrentSyncReportRuns ConcurrentSyncReportRuns { get; set; }
    public DailyApiRequests DailyApiRequests { get; set; }
    public DailyAsyncApexExecutions DailyAsyncApexExecutions { get; set; }
    public DailyBulkApiRequests DailyBulkApiRequests { get; set; }
    public DailyDurableGenericStreamingApiEvents DailyDurableGenericStreamingApiEvents { get; set; }
    public DailyDurableStreamingApiEvents DailyDurableStreamingApiEvents { get; set; }
    public DailyGenericStreamingApiEvents DailyGenericStreamingApiEvents { get; set; }
    public DailyStandardVolumePlatformEvents DailyStandardVolumePlatformEvents { get; set; }
    public DailyStreamingApiEvents DailyStreamingApiEvents { get; set; }
    public DailyWorkflowEmails DailyWorkflowEmails { get; set; }
    public DataStorageMB DataStorageMB { get; set; }
    public DurableStreamingApiConcurrentClients DurableStreamingApiConcurrentClients { get; set; }
    public FileStorageMB FileStorageMB { get; set; }
    public HourlyAsyncReportRuns HourlyAsyncReportRuns { get; set; }
    public HourlyDashboardRefreshes HourlyDashboardRefreshes { get; set; }
    public HourlyDashboardResults HourlyDashboardResults { get; set; }
    public HourlyDashboardStatuses HourlyDashboardStatuses { get; set; }
    public HourlyLongTermIdMapping HourlyLongTermIdMapping { get; set; }
    public HourlyODataCallout HourlyODataCallout { get; set; }
    public HourlyShortTermIdMapping HourlyShortTermIdMapping { get; set; }
    public HourlySyncReportRuns HourlySyncReportRuns { get; set; }
    public HourlyTimeBasedWorkflow HourlyTimeBasedWorkflow { get; set; }
    public MassEmail MassEmail { get; set; }
    public MonthlyPlatformEvents MonthlyPlatformEvents { get; set; }
    public SingleEmail SingleEmail { get; set; }
}

`

use

RootObjectLimitBase limit = JsonConvert.DeserializeObject<RootObjectLimitBase>(resopnseString);

badrussell avatar Jun 11 '19 19:06 badrussell