Home > Net >  Returning JSON Data From API With RestSharp
Returning JSON Data From API With RestSharp

Time:10-29

I am using RestSharp in my MVC project. I have these two classes to use as Models for the API Data.

public class ApiResponseON
{
    public Data Data { get; set; }
}

public class Data
{
    public string? comments { get; set; }
}

and I'm hitting the API to return data like this

public async Task<List<ApiResponseON>> GetJson(string on
{
    RestRequest restRequest = new RestRequest($"/search?filter.on={on}&filter.status=All");
    var data = await _restClient.GetAsync<List<ApiResponseON>>(restRequest);
    return data;
}

but my issue is that I am getting this error on the return data; line

System.InvalidCastException: 'Unable to cast object of type 'RestSharp.JsonArray' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'.'

What do I need to change in the code so this executes successfully?

Raw Json

{
   "TotalRecords":1,
   "Skip":0,
   "Take":100,
   "ReturnCode":"Success",
   "Data":[
      {
         "OrderUser":{
            "Email":"",
            "FullName":"",
            "Username":"",
            "FirstName":"",
            "LastName":"",
            "ExternalId":"",
            "Custom01":"",
            "Custom02":"",
            "Custom03":"",
            "UserGroupName":""
         },
         "OrderNumber":"",
         "CurrencyCode":"USD",
         "OrderTag":null,
         "PoNumber":"",
         "Comments":"4321",
         "CompanyName":"",
         "CompanyGuid":"00000000-0000-0000-0000-000000000000",
         "CompanyId":2295,
         "OrderStatus":"Active",
         "AccountingUnit":null,
         "EmailAddress":"",
         "ShippinndHandling":0,
         "Tax":0,
         "Discount":0,
         "OrderDate":"2017-10-28T12:16:30.453",
         "ClosedDate":null,
         "DesiredShipDate":"2017-11-03T23:59:59",
         "Carrier":"Flat Rate",
         "Shippinddress":{
            "Company":"",
            "Name":"",
            "AddressLine1":"",
            "AddressLine2":"",
            "AddressLine3":"",
            "City":"",
            "State":"",
            "Country":"US",
            "ZipCode":"",
            "PhoneNumber":"",
            "ExternalId":null,
            "Email":"",
            "ShipmentCode":null
         },
         "Billinddress":{
            "Company":"",
            "Name":"",
            "AddressLine1":"",
            "AddressLine2":"",
            "AddressLine3":null,
            "City":"",
            "State":"",
            "Country":"US",
            "ZipCode":"",
            "PhoneNumber":"",
            "ExternalId":null,
            "Email":null,
            "ShipmentCode":null
         },
         "Lines":[
            {
               "LineNumber":1,
               "LineId":"",
               "ApprovalReason":null,
               "Price":0,
               "DirectMailService":null,
               "Status":"Released",
               "EstimatedShipDate":"2017-11-03T23:59:59",
               "Sku":"",
               "PrintFileUrl":"",
               "PrintFilename":"",
               "ListFilUrl":null,
               "ListFilename":"",
               "Quantity":1,
               "FileUrl":null,
               "Thumbnail":null,
               "UnitPrice":0,
               "Part":{
                  "Id":1073225,
                  "Name":"",
                  "UnitCost":0,
                  "MinQuantity":0,
                  "MinQuantity2":0,
                  "MaxQuantity":99999,
                  "DaysOfStockMin":null,
                  "DateAvailable":"2017-10-18T00:00:00",
                  "Comments":"",
                  "CompanyExternalId1":"",
                  "CompanyExternalId2":"",
                  "HasListVariables":false,
                  "SiteId":127,
                  "CompanyId":2295,
                  "IsKit":false,
                  "IsLimitPartOrderQuantity":false,
                  "IsEdeliveryOnly":false,
                  "IsPersonalizeable":false,
                  "VendorName":null,
                  "VendorId":null,
                  "ShipmentGroupId":null,
                  "BoxSizeId":null,
                  "IsConfigurable":false,
                  "IsFixedAsset":false,
                  "Options":{
                     "PartOptionId":1222272,
                     "DateUpdated":"2017-10-18T10:30:43.503",
                     "IsCorporateListAllowed":false,
                     "IsEnforceMasterConfig":false,
                     "IsFulfillChargeExempt":false,
                     "IsMailingListRequired":false,
                     "IsPurchaseListAllowed":false,
                     "IsTaxExempt":false,
                     "IsUploadListAllowed":false,
                     "IsUploadListOnly":false,
                     "PartId":1073225,
                     "IsShippingExempt":false,
                     "ComponentItemType":null,
                     "ComponentMinCount":null,
                     "ComponentMaxCount":null,
                     "AllowNetiveDemand":null,
                     "TaxCode":null,
                     "UseListQtyForKitParts":false,
                     "IsShowBackorderAlert":null,
                     "ChiliDocumentId":null,
                     "IsFixedAsset":false,
                     "FixedAssetFrontBufferDays":null,
                     "FixedAssetBackBufferDays":null,
                     "IsBulkProofing":false,
                     "AllowCopyCustomization":null,
                     "IsForcedDynamicDatasource":false,
                     "AllowFacebook":false,
                     "AllowFacebookCaption":false,
                     "MailingListDeduplicationType":null
                  },
                  "UnitOfMeasure":null,
                  "ThumbnailFile":"image-not-found.png",
                  "Categories":[
                     
                  ],
                  "BoxSize":null,
                  "SourcingZip":null,
                  "SourcingId":null,
                  "IsShippingExempt":false,
                  "ProductionQueue":null,
                  "IsBulkProofing":false,
                  "IsOneToOneMailing":false,
                  "Rating":0,
                  "ReviewsCount":0
               },
               "VendorPart":null,
               "Custom01":"",
               "Custom02":"",
               "Custom03":"",
               "VendorId":null,
               "Discount":0,
               "DiscountName":null,
               "DiscountKey":null,
               "Weight":0,
               "WeightedEstimatedShipping":0,
               "EDeliveryUrl":"",
               "FulfillCharge":0,
               "IsEDelivery":false,
               "IsTaxExempt":false,
               "IsFullfillExempt":false,
               "IsCustomized":false,
               "DeliveryMethod":null,
               "AccountingUnit":null,
               "AccountingUnitDetails":null,
               "ProofName":null,
               "ProofInitial":null,
               "ProofDate":null,
               "ProducingPartner":null,
               "Attributes":[
                  
               ],
               "PrintInfo":{
                  "NumberOfPages":0,
                  "FinishedTrimWidth":0,
                  "FinishedTrimHeight":0,
                  "Duplex":null,
                  "Bleed":null,
                  "Folds":null,
                  "PaperStock":null,
                  "PressSheetSize":null,
                  "NumberOut":null,
                  "BindarySpecifications":null,
                  "FlatSize":null,
                  "ProductionPress":null
               },
               "ShipmentLines":[
                  
               ],
               "RawMaterials":[
                  
               ],
               "CoopBucketName":null,
               "ProofComments":"",
               "IsFixedAsset":"N",
               "RequestedArrivalDate":null,
               "ExpectedReturnDate":null
            }
         ],
         "IsEDeliveryOnly":false,
         "ShowInvoiceEmail":false,
         "InvoiceEmail":"",
         "InvoiceFee":0,
         "Total":0,
         "SubTotal":0,
         "TotalMailingCost":0,
         "IsExpedite":false,
         "PartShippingCost":null,
         "OrderFiles":[
            
         ],
         "ThirdPartyAccountNumber":"",
         "SignatureRequired":false
      }
   ],
   "Message":null,
   "ErrorGuid":null
}

CodePudding user response:

Note this model was obtained by one of many json to C# converters, you can do it in visual studio or there are free web sites.

Given

public class Rootobject
{
   public int TotalRecords { get; set; }
   public int Skip { get; set; }
   public int Take { get; set; }
   public string ReturnCode { get; set; }
   public Datum[] Data { get; set; }
   public object Message { get; set; }
   public object ErrorGuid { get; set; }
}

public class Datum
{
   public Orderuser OrderUser { get; set; }
   public string OrderNumber { get; set; }
   public string CurrencyCode { get; set; }
   public object OrderTag { get; set; }
   public string PoNumber { get; set; }
   public string Comments { get; set; }
   public string CompanyName { get; set; }
   public string CompanyGuid { get; set; }
   public int CompanyId { get; set; }
   public string OrderStatus { get; set; }
   public object AccountingUnit { get; set; }
   public string EmailAddress { get; set; }
   public int ShippinndHandling { get; set; }
   public int Tax { get; set; }
   public int Discount { get; set; }
   public DateTime OrderDate { get; set; }
   public object ClosedDate { get; set; }
   public DateTime DesiredShipDate { get; set; }
   public string Carrier { get; set; }
   public Shippinddress Shippinddress { get; set; }
   public Billinddress Billinddress { get; set; }
   public Line[] Lines { get; set; }
   public bool IsEDeliveryOnly { get; set; }
   public bool ShowInvoiceEmail { get; set; }
   public string InvoiceEmail { get; set; }
   public int InvoiceFee { get; set; }
   public int Total { get; set; }
   public int SubTotal { get; set; }
   public int TotalMailingCost { get; set; }
   public bool IsExpedite { get; set; }
   public object PartShippingCost { get; set; }
   public object[] OrderFiles { get; set; }
   public string ThirdPartyAccountNumber { get; set; }
   public bool SignatureRequired { get; set; }
}

public class Orderuser
{
   public string Email { get; set; }
   public string FullName { get; set; }
   public string Username { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string ExternalId { get; set; }
   public string Custom01 { get; set; }
   public string Custom02 { get; set; }
   public string Custom03 { get; set; }
   public string UserGroupName { get; set; }
}

public class Shippinddress
{
   public string Company { get; set; }
   public string Name { get; set; }
   public string AddressLine1 { get; set; }
   public string AddressLine2 { get; set; }
   public string AddressLine3 { get; set; }
   public string City { get; set; }
   public string State { get; set; }
   public string Country { get; set; }
   public string ZipCode { get; set; }
   public string PhoneNumber { get; set; }
   public object ExternalId { get; set; }
   public string Email { get; set; }
   public object ShipmentCode { get; set; }
}

public class Billinddress
{
   public string Company { get; set; }
   public string Name { get; set; }
   public string AddressLine1 { get; set; }
   public string AddressLine2 { get; set; }
   public object AddressLine3 { get; set; }
   public string City { get; set; }
   public string State { get; set; }
   public string Country { get; set; }
   public string ZipCode { get; set; }
   public string PhoneNumber { get; set; }
   public object ExternalId { get; set; }
   public object Email { get; set; }
   public object ShipmentCode { get; set; }
}

public class Line
{
   public int LineNumber { get; set; }
   public string LineId { get; set; }
   public object ApprovalReason { get; set; }
   public int Price { get; set; }
   public object DirectMailService { get; set; }
   public string Status { get; set; }
   public DateTime EstimatedShipDate { get; set; }
   public string Sku { get; set; }
   public string PrintFileUrl { get; set; }
   public string PrintFilename { get; set; }
   public object ListFilUrl { get; set; }
   public string ListFilename { get; set; }
   public int Quantity { get; set; }
   public object FileUrl { get; set; }
   public object Thumbnail { get; set; }
   public int UnitPrice { get; set; }
   public Part Part { get; set; }
   public object VendorPart { get; set; }
   public string Custom01 { get; set; }
   public string Custom02 { get; set; }
   public string Custom03 { get; set; }
   public object VendorId { get; set; }
   public int Discount { get; set; }
   public object DiscountName { get; set; }
   public object DiscountKey { get; set; }
   public int Weight { get; set; }
   public int WeightedEstimatedShipping { get; set; }
   public string EDeliveryUrl { get; set; }
   public int FulfillCharge { get; set; }
   public bool IsEDelivery { get; set; }
   public bool IsTaxExempt { get; set; }
   public bool IsFullfillExempt { get; set; }
   public bool IsCustomized { get; set; }
   public object DeliveryMethod { get; set; }
   public object AccountingUnit { get; set; }
   public object AccountingUnitDetails { get; set; }
   public object ProofName { get; set; }
   public object ProofInitial { get; set; }
   public object ProofDate { get; set; }
   public object ProducingPartner { get; set; }
   public object[] Attributes { get; set; }
   public Printinfo PrintInfo { get; set; }
   public object[] ShipmentLines { get; set; }
   public object[] RawMaterials { get; set; }
   public object CoopBucketName { get; set; }
   public string ProofComments { get; set; }
   public string IsFixedAsset { get; set; }
   public object RequestedArrivalDate { get; set; }
   public object ExpectedReturnDate { get; set; }
}

public class Part
{
   public int Id { get; set; }
   public string Name { get; set; }
   public int UnitCost { get; set; }
   public int MinQuantity { get; set; }
   public int MinQuantity2 { get; set; }
   public int MaxQuantity { get; set; }
   public object DaysOfStockMin { get; set; }
   public DateTime DateAvailable { get; set; }
   public string Comments { get; set; }
   public string CompanyExternalId1 { get; set; }
   public string CompanyExternalId2 { get; set; }
   public bool HasListVariables { get; set; }
   public int SiteId { get; set; }
   public int CompanyId { get; set; }
   public bool IsKit { get; set; }
   public bool IsLimitPartOrderQuantity { get; set; }
   public bool IsEdeliveryOnly { get; set; }
   public bool IsPersonalizeable { get; set; }
   public object VendorName { get; set; }
   public object VendorId { get; set; }
   public object ShipmentGroupId { get; set; }
   public object BoxSizeId { get; set; }
   public bool IsConfigurable { get; set; }
   public bool IsFixedAsset { get; set; }
   public Options Options { get; set; }
   public object UnitOfMeasure { get; set; }
   public string ThumbnailFile { get; set; }
   public object[] Categories { get; set; }
   public object BoxSize { get; set; }
   public object SourcingZip { get; set; }
   public object SourcingId { get; set; }
   public bool IsShippingExempt { get; set; }
   public object ProductionQueue { get; set; }
   public bool IsBulkProofing { get; set; }
   public bool IsOneToOneMailing { get; set; }
   public int Rating { get; set; }
   public int ReviewsCount { get; set; }
}

public class Options
{
   public int PartOptionId { get; set; }
   public DateTime DateUpdated { get; set; }
   public bool IsCorporateListAllowed { get; set; }
   public bool IsEnforceMasterConfig { get; set; }
   public bool IsFulfillChargeExempt { get; set; }
   public bool IsMailingListRequired { get; set; }
   public bool IsPurchaseListAllowed { get; set; }
   public bool IsTaxExempt { get; set; }
   public bool IsUploadListAllowed { get; set; }
   public bool IsUploadListOnly { get; set; }
   public int PartId { get; set; }
   public bool IsShippingExempt { get; set; }
   public object ComponentItemType { get; set; }
   public object ComponentMinCount { get; set; }
   public object ComponentMaxCount { get; set; }
   public object AllowNetiveDemand { get; set; }
   public object TaxCode { get; set; }
   public bool UseListQtyForKitParts { get; set; }
   public object IsShowBackorderAlert { get; set; }
   public object ChiliDocumentId { get; set; }
   public bool IsFixedAsset { get; set; }
   public object FixedAssetFrontBufferDays { get; set; }
   public object FixedAssetBackBufferDays { get; set; }
   public bool IsBulkProofing { get; set; }
   public object AllowCopyCustomization { get; set; }
   public bool IsForcedDynamicDatasource { get; set; }
   public bool AllowFacebook { get; set; }
   public bool AllowFacebookCaption { get; set; }
   public object MailingListDeduplicationType { get; set; }
}

public class Printinfo
{
   public int NumberOfPages { get; set; }
   public int FinishedTrimWidth { get; set; }
   public int FinishedTrimHeight { get; set; }
   public object Duplex { get; set; }
   public object Bleed { get; set; }
   public object Folds { get; set; }
   public object PaperStock { get; set; }
   public object PressSheetSize { get; set; }
   public object NumberOut { get; set; }
   public object BindarySpecifications { get; set; }
   public object FlatSize { get; set; }
   public object ProductionPress { get; set; }
}

Usage

var result = _restClient.GetAsync<Rootobject>(restRequest);

Once you have your results, you can prune it how you like, ill leave that up to you, this was only to address the serialization error.

  • Related