Force.com-Toolkit-for-NET
Force.com-Toolkit-for-NET copied to clipboard
JsonHttpClient failed to deserialize some resource?
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?
`
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);