简体   繁体   中英

Returning JSON Data From API With RestSharp

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
}

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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