I'm trying to turn the string result below in the first line of code into an object of type "Root.cs". I have "Root.cs" class set up in my Visual Studio 2019 "solution" with proper classes set up to turn the string result into the object.
This line of code works fine to get me the string I need:
var result = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result;
Here's the contents of the string "result":
{"sections":[{"id":"Building_Configuration","name":"Building_Configuration","sections":[{"id":"B uilding_Configuration.Parameters_SP","name":"Building_Configuration.Parameters_SP","sectio ns":[],"variables":[{"id":"Building_Configuration.Parameters_SP.fixtureStrategy_SP","name":"Bui lding_Configuration.Parameters_SP.fixtureStrategy_SP","valueType":"String","distinctValueCou nt":3.0,"allowMultipleAssignments":false,"values":[{"name":"ETA","value":"ETA","properties":[{ "id":"fullyqualifiedname","value":"ETA","type":"String"},{"id":"name","value":"ETA","type":"Stri ng"}],"type":"SingletonValue","assigned":"byDefault","incompatible":false},{"name":"ETD","valu e":"ETD","properties":[{"id":"fullyqualifiedname","value":"ETD","type":"String"},{"id":"name","v alue":"ETD","type":"String"}],"type":"SingletonValue","incompatible":false},{"name":"ETA/ETD", "value":"ETA/ETD","properties":[{"id":"fullyqualifiedname","value":"ETA/ETD","type":"String"},{ "id":"name","value":"ETA/ETD","type":"String"}],"type":"SingletonValue","incompatible":false}],"
Now, I need to create the object of type "Root" (My Model Class) for the purpose of picking and choosing certain values out of it. Shouldn't this line work for that?
Root MyObject = JsonConvert.DeserializeObject<Root>(result);
Here's the definition of Root.cs:
public class Root
{
public List<Sections> sections { get; set; }
public RemovedAssignments removedAssignments { get; set; }
public Arguments arguments { get; set; }
public bool isComplete { get; set; }
public bool isConfigurable { get; set; }
public Debug debug { get; set; }
public string language { get; set; }
public string packagePath { get; set; }
}
public class Sections
{
public string id { get; set; }
public string name { get; set; }
public List<Sections> sections { get; set; }
public List<Variable> variables { get; set; }
public List<Property> properties { get; set; }
}
public class RemovedAssignments
{
public List<VariableAssignment> variableAssignments { get; set; }
public List<object> priceLineAssignments { get; set; }
}
public class Debug
{
public List<ScriptError> scriptError { get; set; }
}
public class Property
{
public string id { get; set; }
public string value { get; set; }
public string type { get; set; }
}
public class ScriptError
{
public string scriptName { get; set; }
public string Error { get; set; }
}
public class Value
{
public string name { get; set; }
public object value { get; set; }
public List<Property> properties { get; set; }
public string type { get; set; }
public string assigned { get; set; }
public bool incompatible { get; set; }
public double? lower { get; set; }
public double? upper { get; set; }
}
public class Value3
{
public string value { get; set; }
public string name { get; set; }
public bool exclude { get; set; }
}
public class Variable
{
public string id { get; set; }
public string name { get; set; }
public string valueType { get; set; }
public double distinctValueCount { get; set; }
public bool allowMultipleAssignments { get; set; }
public List<Value> values { get; set; }
public List<Property> properties { get; set; }
}
public class Variable3
{
public string id { get; set; }
public string name { get; set; }
public string valueType { get; set; }
public bool allowMultipleAssignments { get; set; }
}
public class VariableAssignment
{
public Variable variable { get; set; }
public Value value { get; set; }
}
public class Arguments
{
public Configuration Configuration { get; set; }
}
public class Configuration
{
[JsonProperty("Building_Configuration.Parameters_SP.fixtureStrategy_SP")]
public string BuildingConfigurationParametersSPFixtureStrategySP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.dimensionSelection_SP")]
public string BuildingConfigurationParametersSPDimensionSelectionSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.controllerRobotic_SP")]
public bool BuildingConfigurationParametersSPControllerRoboticSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.controllerBACNet_SP")]
public bool BuildingConfigurationParametersSPControllerBACNetSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.digitalPI_SP")]
public string BuildingConfigurationParametersSPDigitalPISP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.interGroupEmergencyPower_SP")]
public string BuildingConfigurationParametersSPInterGroupEmergencyPowerSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.customJewel_SP")]
public string BuildingConfigurationParametersSPCustomJewelSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.loweringSequenceJewel_SP")]
public string BuildingConfigurationParametersSPLoweringSequenceJewelSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.inServiceJewel_SP")]
public string BuildingConfigurationParametersSPInServiceJewelSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.cat5CableFeetRequired_SP")]
public int BuildingConfigurationParametersSPCat5CableFeetRequiredSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.fiberOpticConnectorsSetOf4_SP")]
public int BuildingConfigurationParametersSPFiberOpticConnectorsSetOf4SP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.cGADevices_SP")]
public int BuildingConfigurationParametersSPCGADevicesSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.fiberOpticCableFeetRequired_SP")]
public int BuildingConfigurationParametersSPFiberOpticCableFeetRequiredSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfGatewayForLiftNet_SP")]
public int BuildingConfigurationParametersSPQtyOfGatewayForLiftNetSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfGroupEthernetBoxWIMSSoftwareOnly_SP")]
public int BuildingConfigurationParametersSPQtyOfGroupEthernetBoxWIMSSoftwareOnlySP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.interGroupStarBox_SP")]
public int BuildingConfigurationParametersSPInterGroupStarBoxSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.mediaConverterAndPowerSource_SP")]
public int BuildingConfigurationParametersSPMediaConverterAndPowerSourceSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfSoftwareSiteKeyJBFiles_SP")]
public int BuildingConfigurationParametersSPQtyOfSoftwareSiteKeyJBFilesSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.doorOpenSignalJewel_SP")]
public bool BuildingConfigurationParametersSPDoorOpenSignalJewelSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.mountingProvisionsForMonitor_SP")]
public bool BuildingConfigurationParametersSPMountingProvisionsForMonitorSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.intercomSpace_SP")]
public bool BuildingConfigurationParametersSPIntercomSpaceSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.specialEngraving_SP")]
public bool BuildingConfigurationParametersSPSpecialEngravingSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.lobbyPanelFinish_SP")]
public string BuildingConfigurationParametersSPLobbyPanelFinishSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.includeAGILEDesignCenter_SP")]
public int BuildingConfigurationParametersSPIncludeAGILEDesignCenterSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyKiosksOver300Ft_SP")]
public int BuildingConfigurationParametersSPQtyKiosksOver300FtSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.dDSecurityInterfaceType_SP")]
public bool BuildingConfigurationParametersSPDDSecurityInterfaceTypeSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.iMSOwnersStandard_SP")]
public int BuildingConfigurationParametersSPIMSOwnersStandardSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfIMSOwnersEnhanced_SP")]
public int BuildingConfigurationParametersSPQtyOfIMSOwnersEnhancedSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.totalGroupHallStation_SP")]
public int BuildingConfigurationParametersSPTotalGroupHallStationSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.totalUnitHallStation_SP")]
public int BuildingConfigurationParametersSPTotalUnitHallStationSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.totalBuildingEquip_SP")]
public int BuildingConfigurationParametersSPTotalBuildingEquipSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.IsSmartRescue10_Bool_SP")]
public bool BuildingConfigurationParametersSPIsSmartRescue10BoolSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.IsSmartRescue5_Bool_SP")]
public bool BuildingConfigurationParametersSPIsSmartRescue5BoolSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.lobbyPanel_SP")]
public string BuildingConfigurationParametersSPLobbyPanelSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfSmartRescuePhone10_StndAlone_SP")]
public int BuildingConfigurationParametersSPQtyOfSmartRescuePhone10StndAloneSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfSmartRescuePhone5_Lobby_SP")]
public int BuildingConfigurationParametersSPQtyOfSmartRescuePhone5LobbySP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfSmartRescuePhone5_StndAlone_SP")]
public int BuildingConfigurationParametersSPQtyOfSmartRescuePhone5StndAloneSP { get; set; }
[JsonProperty("Building_Configuration.Parameters_SP.qtyOfSmartRescuePhone10_Lobby_SP")]
public int BuildingConfigurationParametersSPQtyOfSmartRescuePhone10LobbySP { get; set; }
[JsonProperty("Building_Configuration.Parameters.ASYEAR_INT")]
public int BuildingConfigurationParametersASYEARINT { get; set; }
[JsonProperty("Building_Configuration.Parameters.BLANDINGS")]
public int BuildingConfigurationParametersBLANDINGS { get; set; }
[JsonProperty("Building_Configuration.Parameters.ASTYPE")]
public string BuildingConfigurationParametersASTYPE { get; set; }
[JsonProperty("Building_Configuration.Parameters.ASYEAR")]
public string BuildingConfigurationParametersASYEAR { get; set; }
[JsonProperty("Building_Configuration.Parameters.BLDGNAME")]
public string BuildingConfigurationParametersBLDGNAME { get; set; }
[JsonProperty("Building_Configuration.Parameters.IBCSDS")]
public int BuildingConfigurationParametersIBCSDS { get; set; }
[JsonProperty("Building_Configuration.Parameters.ELEVBASE")]
public int BuildingConfigurationParametersELEVBASE { get; set; }
[JsonProperty("Building_Configuration.Parameters.SEISZONE")]
public string BuildingConfigurationParametersSEISZONE { get; set; }
[JsonProperty("Building_Configuration.Parameters.SEISEQUIP")]
public string BuildingConfigurationParametersSEISEQUIP { get; set; }
[JsonProperty("Building_Configuration.Parameters.ISSEISMIC")]
public string BuildingConfigurationParametersISSEISMIC { get; set; }
[JsonProperty("Building_Configuration.Parameters.IBCSDC")]
public string BuildingConfigurationParametersIBCSDC { get; set; }
[JsonProperty("Building_Configuration.Parameters.IBCIP")]
public string BuildingConfigurationParametersIBCIP { get; set; }
[JsonProperty("Building_Configuration.Parameters.NBCCPDB")]
public string BuildingConfigurationParametersNBCCPDB { get; set; }
[JsonProperty("Building_Configuration.Parameters.NBCCIE")]
public int BuildingConfigurationParametersNBCCIE { get; set; }
[JsonProperty("Building_Configuration.Parameters.NBCCFA")]
public int BuildingConfigurationParametersNBCCFA { get; set; }
[JsonProperty("Building_Configuration.Parameters.NBCCSA02")]
public int BuildingConfigurationParametersNBCCSA02 { get; set; }
[JsonProperty("Building_Configuration.Parameters.BLDGCODE")]
public string BuildingConfigurationParametersBLDGCODE { get; set; }
[JsonProperty("Building_Configuration.Parameters.HALLFIN")]
public string BuildingConfigurationParametersHALLFIN { get; set; }
[JsonProperty("Building_Configuration.Parameters.MRP")]
public string BuildingConfigurationParametersMRP { get; set; }
[JsonProperty("Building_Configuration.Parameters.HALLMAT")]
public string BuildingConfigurationParametersHALLMAT { get; set; }
My "result" and my "Root.cs" class are each larger than the 30,000 characters limit here. So, I've had to only post a portion of my string "result" and my "Root.cs" class. I'm trying to simplify this question. Please forgive me while I learn how to use this...
Answer: I was making the newbie mistake of trying to return a string that I picked out of a "Root.cs" Model class as a Root object. I had the return type of the method set to Root instead of string. Upon changing the return type to string, that part of my solution works fine.
It works fine like this:
public string CreateExecPost(FormData person2){
var payload = new StringContent(newPost, Encoding.UTF8, "application/json");
var result = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result;//result is already in JSON
Root MyObject = JsonConvert.DeserializeObject<Root>(result);
//return MyObject.language; //WORKS
return MyObject.language;
}
It's about the eBay API "GetOrders".
If I have more than one order in the given period of time my following code works. But if only one order is read then the "OrderArray.Order" is not an array and this gives the following exception.
Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'Order[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'GetOrdersResponse.OrderArray.Order.OrderID', line 1, position 352.'
Here my Code:
GetOrdersResponseJSON orderResp = JsonConvert.DeserializeObject<GetOrdersResponseJSON>(json);
foreach (var item in orderResp.GetOrdersResponse.OrderArray.Order)
{
Console.WriteLine(item.TransactionArray.Transaction.Buyer.Email);
}
GetOrdersResponseJSON:
using E_BAY_order_importer;
using Newtonsoft.Json;
using System;
public class GetOrdersResponseJSON
{
public Xml xml { get; set; }
public Getordersresponse GetOrdersResponse { get; set; }
}
public class Xml
{
public string version { get; set; }
public string encoding { get; set; }
}
public class Getordersresponse
{
public string xmlns { get; set; }
public DateTime Timestamp { get; set; }
public string Ack { get; set; }
public string Version { get; set; }
public string Build { get; set; }
public Paginationresult PaginationResult { get; set; }
public bool HasMoreOrders { get; set; }
public Orderarray OrderArray { get; set; }
public string OrdersPerPage { get; set; }
public string PageNumber { get; set; }
public string ReturnedOrderCountActual { get; set; }
}
public class Paginationresult
{
public string TotalNumberOfPages { get; set; }
public string TotalNumberOfEntries { get; set; }
}
public class Orderarray
{
public Order[] Order { get; set; }
}
public class Order
{
public string OrderID { get; set; }
public string OrderStatus { get; set; }
public Adjustmentamount AdjustmentAmount { get; set; }
public Amountpaid AmountPaid { get; set; }
public Amountsaved AmountSaved { get; set; }
public Checkoutstatus CheckoutStatus { get; set; }
public Shippingdetails ShippingDetails { get; set; }
public DateTime CreatedTime { get; set; }
public string SellerEmail { get; set; }
public Shippingaddress ShippingAddress { get; set; }
public Shippingserviceselected ShippingServiceSelected { get; set; }
public Subtotal Subtotal { get; set; }
public Total Total { get; set; }
public string eBayCollectAndRemitTax { get; set; }
public Transactionarray TransactionArray { get; set; }
public string BuyerUserID { get; set; }
public DateTime PaidTime { get; set; }
public DateTime ShippedTime { get; set; }
public string IntegratedMerchantCreditCardEnabled { get; set; }
public string EIASToken { get; set; }
public string PaymentHoldStatus { get; set; }
public string IsMultiLegShipping { get; set; }
public string SellerUserID { get; set; }
public string SellerEIASToken { get; set; }
public string CancelStatus { get; set; }
public string ExtendedOrderID { get; set; }
public string ContainseBayPlusTransaction { get; set; }
}
public class Adjustmentamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Amountpaid
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Amountsaved
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Checkoutstatus
{
public string eBayPaymentStatus { get; set; }
public DateTime LastModifiedTime { get; set; }
public string PaymentMethod { get; set; }
public string Status { get; set; }
public string IntegratedMerchantCreditCardEnabled { get; set; }
public string PaymentInstrument { get; set; }
}
public class Shippingdetails
{
public Salestax SalesTax { get; set; }
public Shippingserviceoptions ShippingServiceOptions { get; set; }
public Internationalshippingserviceoption InternationalShippingServiceOption { get; set; }
public string SellingManagerSalesRecordNumber { get; set; }
public string GetItFast { get; set; }
}
public class Salestax
{
public string SalesTaxPercent { get; set; }
public string SalesTaxState { get; set; }
public string ShippingIncludedInTax { get; set; }
public Salestaxamount SalesTaxAmount { get; set; }
}
public class Salestaxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingserviceoptions
{
public string ShippingService { get; set; }
public Shippingservicecost ShippingServiceCost { get; set; }
public string ShippingServicePriority { get; set; }
public string ExpeditedService { get; set; }
public string ShippingTimeMin { get; set; }
public string ShippingTimeMax { get; set; }
}
public class Shippingservicecost
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Internationalshippingserviceoption
{
public string ShippingService { get; set; }
public Shippingservicecost1 ShippingServiceCost { get; set; }
public string ShippingServicePriority { get; set; }
public string[] ShipToLocation { get; set; }
}
public class Shippingservicecost1
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingaddress
{
public string Name { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string CityName { get; set; }
public string StateOrProvince { get; set; }
public string Country { get; set; }
public string CountryName { get; set; }
public string Phone { get; set; }
public string PostalCode { get; set; }
public string AddressID { get; set; }
public string AddressOwner { get; set; }
public string ExternalAddressID { get; set; }
}
public class Shippingserviceselected
{
public string ShippingService { get; set; }
public Shippingservicecost2 ShippingServiceCost { get; set; }
}
public class Shippingservicecost2
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Subtotal
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Total
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Transactionarray
{
public Transaction Transaction { get; set; }
}
public class Transaction
{
public Buyer Buyer { get; set; }
public Shippingdetails1 ShippingDetails { get; set; }
public DateTime CreatedDate { get; set; }
public Item Item { get; set; }
public string QuantityPurchased { get; set; }
public Status Status { get; set; }
public string TransactionID { get; set; }
public Transactionprice TransactionPrice { get; set; }
public string eBayCollectAndRemitTax { get; set; }
public Shippingserviceselected1 ShippingServiceSelected { get; set; }
public DateTime ShippedTime { get; set; }
public string TransactionSiteID { get; set; }
public string Platform { get; set; }
public Variation Variation { get; set; }
public Taxes Taxes { get; set; }
public string OrderLineItemID { get; set; }
public string ExtendedOrderID { get; set; }
public string eBayPlusTransaction { get; set; }
public string GuaranteedShipping { get; set; }
public string GuaranteedDelivery { get; set; }
}
public class Buyer
{
public string Email { get; set; }
public string VATStatus { get; set; }
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
}
public class Shippingdetails1
{
public string SellingManagerSalesRecordNumber { get; set; }
}
public class Item
{
public string ItemID { get; set; }
public string Site { get; set; }
public string Title { get; set; }
public string ConditionID { get; set; }
public string ConditionDisplayName { get; set; }
}
public class Status
{
public string PaymentHoldStatus { get; set; }
public string InquiryStatus { get; set; }
public string ReturnStatus { get; set; }
}
public class Transactionprice
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingserviceselected1
{
public Shippingpackageinfo ShippingPackageInfo { get; set; }
}
public class Shippingpackageinfo
{
public DateTime EstimatedDeliveryTimeMin { get; set; }
public DateTime EstimatedDeliveryTimeMax { get; set; }
public DateTime HandleByTime { get; set; }
public DateTime MinNativeEstimatedDeliveryTime { get; set; }
public DateTime MaxNativeEstimatedDeliveryTime { get; set; }
}
public class Variation
{
public string SKU { get; set; }
public Variationspecifics VariationSpecifics { get; set; }
public string VariationTitle { get; set; }
public string VariationViewItemURL { get; set; }
}
public class Variationspecifics
{
public Namevaluelist[] NameValueList { get; set; }
}
public class Namevaluelist
{
public string Name { get; set; }
public string Value { get; set; }
}
public class Taxes
{
public Totaltaxamount TotalTaxAmount { get; set; }
public Taxdetails TaxDetails { get; set; }
}
public class Totaltaxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxdetails
{
public string Imposition { get; set; }
public string TaxDescription { get; set; }
public Taxamount TaxAmount { get; set; }
public Taxonsubtotalamount TaxOnSubtotalAmount { get; set; }
public Taxonshippingamount TaxOnShippingAmount { get; set; }
public Taxonhandlingamount TaxOnHandlingAmount { get; set; }
}
public class Taxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonsubtotalamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonshippingamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonhandlingamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
What can I do to make it work with only one order (without array) and with multiple orders (with array)? Since I would like to continue using newtonsoft json it would be nice if I get a solution with newtonsoft json!
Here is an example of the json that I get:
// One Order I get as JSON:
[...]
"OrderArray": {
"Order": {
[...]
// Multiple Orders I get as JSON:
[...]
"OrderArray": {
"Order": [
[...]
So definitely once an array and once an object!
We can use custom JSONConverter
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace RabbitMQPoc
{
public class Program
{
public static void Main(string[] args)
{
//Multiple object test
string jsonForMultipleOrder = "{\"xml\":null,\"GetOrdersResponse\":{\"xmlns\":null,\"Timestamp\":\"0001-01-01T00:00:00\",\"Ack\":null,\"Version\":null,\"Build\":null,\"PaginationResult\":null,\"HasMoreOrders\":false,\"OrderArray\":{\"Order\":[{\"OrderID\":null,\"OrderStatus\":null,\"AdjustmentAmount\":null,\"AmountPaid\":null,\"AmountSaved\":null,\"CheckoutStatus\":null,\"ShippingDetails\":null,\"CreatedTime\":\"0001-01-01T00:00:00\",\"SellerEmail\":null,\"ShippingAddress\":null,\"ShippingServiceSelected\":null,\"Subtotal\":null,\"Total\":null,\"eBayCollectAndRemitTax\":null,\"TransactionArray\":{\"Transaction\":{\"Buyer\":{\"Email\":\"sm-a\",\"VATStatus\":null,\"UserFirstName\":null,\"UserLastName\":null},\"ShippingDetails\":null,\"CreatedDate\":\"0001-01-01T00:00:00\",\"Item\":null,\"QuantityPurchased\":null,\"Status\":null,\"TransactionID\":null,\"TransactionPrice\":null,\"eBayCollectAndRemitTax\":null,\"ShippingServiceSelected\":null,\"ShippedTime\":\"0001-01-01T00:00:00\",\"TransactionSiteID\":null,\"Platform\":null,\"Variation\":null,\"Taxes\":null,\"OrderLineItemID\":null,\"ExtendedOrderID\":null,\"eBayPlusTransaction\":null,\"GuaranteedShipping\":null,\"GuaranteedDelivery\":null}},\"BuyerUserID\":null,\"PaidTime\":\"0001-01-01T00:00:00\",\"ShippedTime\":\"0001-01-01T00:00:00\",\"IntegratedMerchantCreditCardEnabled\":null,\"EIASToken\":null,\"PaymentHoldStatus\":null,\"IsMultiLegShipping\":null,\"SellerUserID\":null,\"SellerEIASToken\":null,\"CancelStatus\":null,\"ExtendedOrderID\":null,\"ContainseBayPlusTransaction\":null},{\"OrderID\":null,\"OrderStatus\":null,\"AdjustmentAmount\":null,\"AmountPaid\":null,\"AmountSaved\":null,\"CheckoutStatus\":null,\"ShippingDetails\":null,\"CreatedTime\":\"0001-01-01T00:00:00\",\"SellerEmail\":null,\"ShippingAddress\":null,\"ShippingServiceSelected\":null,\"Subtotal\":null,\"Total\":null,\"eBayCollectAndRemitTax\":null,\"TransactionArray\":{\"Transaction\":{\"Buyer\":{\"Email\":\"darshana\",\"VATStatus\":null,\"UserFirstName\":null,\"UserLastName\":null},\"ShippingDetails\":null,\"CreatedDate\":\"0001-01-01T00:00:00\",\"Item\":null,\"QuantityPurchased\":null,\"Status\":null,\"TransactionID\":null,\"TransactionPrice\":null,\"eBayCollectAndRemitTax\":null,\"ShippingServiceSelected\":null,\"ShippedTime\":\"0001-01-01T00:00:00\",\"TransactionSiteID\":null,\"Platform\":null,\"Variation\":null,\"Taxes\":null,\"OrderLineItemID\":null,\"ExtendedOrderID\":null,\"eBayPlusTransaction\":null,\"GuaranteedShipping\":null,\"GuaranteedDelivery\":null}},\"BuyerUserID\":null,\"PaidTime\":\"0001-01-01T00:00:00\",\"ShippedTime\":\"0001-01-01T00:00:00\",\"IntegratedMerchantCreditCardEnabled\":null,\"EIASToken\":null,\"PaymentHoldStatus\":null,\"IsMultiLegShipping\":null,\"SellerUserID\":null,\"SellerEIASToken\":null,\"CancelStatus\":null,\"ExtendedOrderID\":null,\"ContainseBayPlusTransaction\":null}]},\"OrdersPerPage\":null,\"PageNumber\":null,\"ReturnedOrderCountActual\":null}}";
GetOrdersResponseJSON orderResp = JsonConvert.DeserializeObject<GetOrdersResponseJSON>(jsonForMultipleOrder);
foreach (var item in orderResp.GetOrdersResponse.OrderArray.Order)
{
Console.WriteLine("From Mutiple order-> Email:" + item.TransactionArray.Transaction.Buyer.Email);
}
//Single object test
string jsonForSingleOrder = "{\"xml\":null,\"GetOrdersResponse\":{\"xmlns\":null,\"Timestamp\":\"0001-01-01T00:00:00\",\"Ack\":null,\"Version\":null,\"Build\":null,\"PaginationResult\":null,\"HasMoreOrders\":false,\"OrderArray\":{\"Order\":{\"OrderID\":null,\"OrderStatus\":null,\"AdjustmentAmount\":null,\"AmountPaid\":null,\"AmountSaved\":null,\"CheckoutStatus\":null,\"ShippingDetails\":null,\"CreatedTime\":\"0001-01-01T00:00:00\",\"SellerEmail\":null,\"ShippingAddress\":null,\"ShippingServiceSelected\":null,\"Subtotal\":null,\"Total\":null,\"eBayCollectAndRemitTax\":null,\"TransactionArray\":{\"Transaction\":{\"Buyer\":{\"Email\":\"darshana\",\"VATStatus\":null,\"UserFirstName\":null,\"UserLastName\":null},\"ShippingDetails\":null,\"CreatedDate\":\"0001-01-01T00:00:00\",\"Item\":null,\"QuantityPurchased\":null,\"Status\":null,\"TransactionID\":null,\"TransactionPrice\":null,\"eBayCollectAndRemitTax\":null,\"ShippingServiceSelected\":null,\"ShippedTime\":\"0001-01-01T00:00:00\",\"TransactionSiteID\":null,\"Platform\":null,\"Variation\":null,\"Taxes\":null,\"OrderLineItemID\":null,\"ExtendedOrderID\":null,\"eBayPlusTransaction\":null,\"GuaranteedShipping\":null,\"GuaranteedDelivery\":null}},\"BuyerUserID\":null,\"PaidTime\":\"0001-01-01T00:00:00\",\"ShippedTime\":\"0001-01-01T00:00:00\",\"IntegratedMerchantCreditCardEnabled\":null,\"EIASToken\":null,\"PaymentHoldStatus\":null,\"IsMultiLegShipping\":null,\"SellerUserID\":null,\"SellerEIASToken\":null,\"CancelStatus\":null,\"ExtendedOrderID\":null,\"ContainseBayPlusTransaction\":null}},\"OrdersPerPage\":null,\"PageNumber\":null,\"ReturnedOrderCountActual\":null}}";
GetOrdersResponseJSON ordersResponseJSONForSingleOrder = JsonConvert.DeserializeObject<GetOrdersResponseJSON>(jsonForSingleOrder);
foreach (var item in ordersResponseJSONForSingleOrder.GetOrdersResponse.OrderArray.Order)
{
Console.WriteLine("From single order-> Email:"+item.TransactionArray.Transaction.Buyer.Email);
}
}
class SingleOrArrayConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(List<T>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<T>>();
}
return new List<T> { token.ToObject<T>() };
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
public class GetOrdersResponseJSON
{
public Xml xml { get; set; }
public Getordersresponse GetOrdersResponse { get; set; }
}
public class Xml
{
public string version { get; set; }
public string encoding { get; set; }
}
public class Getordersresponse
{
public string xmlns { get; set; }
public DateTime Timestamp { get; set; }
public string Ack { get; set; }
public string Version { get; set; }
public string Build { get; set; }
public Paginationresult PaginationResult { get; set; }
public bool HasMoreOrders { get; set; }
public Orderarray OrderArray { get; set; }
public string OrdersPerPage { get; set; }
public string PageNumber { get; set; }
public string ReturnedOrderCountActual { get; set; }
}
public class Paginationresult
{
public string TotalNumberOfPages { get; set; }
public string TotalNumberOfEntries { get; set; }
}
public class Orderarray
{
[JsonConverter(typeof(SingleOrArrayConverter<Order>))]
public List<Order> Order { get; set; }
}
public class Order
{
public string OrderID { get; set; }
public string OrderStatus { get; set; }
public Adjustmentamount AdjustmentAmount { get; set; }
public Amountpaid AmountPaid { get; set; }
public Amountsaved AmountSaved { get; set; }
public Checkoutstatus CheckoutStatus { get; set; }
public Shippingdetails ShippingDetails { get; set; }
public DateTime CreatedTime { get; set; }
public string SellerEmail { get; set; }
public Shippingaddress ShippingAddress { get; set; }
public Shippingserviceselected ShippingServiceSelected { get; set; }
public Subtotal Subtotal { get; set; }
public Total Total { get; set; }
public string eBayCollectAndRemitTax { get; set; }
public Transactionarray TransactionArray { get; set; }
public string BuyerUserID { get; set; }
public DateTime PaidTime { get; set; }
public DateTime ShippedTime { get; set; }
public string IntegratedMerchantCreditCardEnabled { get; set; }
public string EIASToken { get; set; }
public string PaymentHoldStatus { get; set; }
public string IsMultiLegShipping { get; set; }
public string SellerUserID { get; set; }
public string SellerEIASToken { get; set; }
public string CancelStatus { get; set; }
public string ExtendedOrderID { get; set; }
public string ContainseBayPlusTransaction { get; set; }
}
public class Adjustmentamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Amountpaid
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Amountsaved
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Checkoutstatus
{
public string eBayPaymentStatus { get; set; }
public DateTime LastModifiedTime { get; set; }
public string PaymentMethod { get; set; }
public string Status { get; set; }
public string IntegratedMerchantCreditCardEnabled { get; set; }
public string PaymentInstrument { get; set; }
}
public class Shippingdetails
{
public Salestax SalesTax { get; set; }
public Shippingserviceoptions ShippingServiceOptions { get; set; }
public Internationalshippingserviceoption InternationalShippingServiceOption { get; set; }
public string SellingManagerSalesRecordNumber { get; set; }
public string GetItFast { get; set; }
}
public class Salestax
{
public string SalesTaxPercent { get; set; }
public string SalesTaxState { get; set; }
public string ShippingIncludedInTax { get; set; }
public Salestaxamount SalesTaxAmount { get; set; }
}
public class Salestaxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingserviceoptions
{
public string ShippingService { get; set; }
public Shippingservicecost ShippingServiceCost { get; set; }
public string ShippingServicePriority { get; set; }
public string ExpeditedService { get; set; }
public string ShippingTimeMin { get; set; }
public string ShippingTimeMax { get; set; }
}
public class Shippingservicecost
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Internationalshippingserviceoption
{
public string ShippingService { get; set; }
public Shippingservicecost1 ShippingServiceCost { get; set; }
public string ShippingServicePriority { get; set; }
public string[] ShipToLocation { get; set; }
}
public class Shippingservicecost1
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingaddress
{
public string Name { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string CityName { get; set; }
public string StateOrProvince { get; set; }
public string Country { get; set; }
public string CountryName { get; set; }
public string Phone { get; set; }
public string PostalCode { get; set; }
public string AddressID { get; set; }
public string AddressOwner { get; set; }
public string ExternalAddressID { get; set; }
}
public class Shippingserviceselected
{
public string ShippingService { get; set; }
public Shippingservicecost2 ShippingServiceCost { get; set; }
}
public class Shippingservicecost2
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Subtotal
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Total
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Transactionarray
{
public Transaction Transaction { get; set; }
}
public class Transaction
{
public Buyer Buyer { get; set; }
public Shippingdetails1 ShippingDetails { get; set; }
public DateTime CreatedDate { get; set; }
public Item Item { get; set; }
public string QuantityPurchased { get; set; }
public Status Status { get; set; }
public string TransactionID { get; set; }
public Transactionprice TransactionPrice { get; set; }
public string eBayCollectAndRemitTax { get; set; }
public Shippingserviceselected1 ShippingServiceSelected { get; set; }
public DateTime ShippedTime { get; set; }
public string TransactionSiteID { get; set; }
public string Platform { get; set; }
public Variation Variation { get; set; }
public Taxes Taxes { get; set; }
public string OrderLineItemID { get; set; }
public string ExtendedOrderID { get; set; }
public string eBayPlusTransaction { get; set; }
public string GuaranteedShipping { get; set; }
public string GuaranteedDelivery { get; set; }
}
public class Buyer
{
public string Email { get; set; }
public string VATStatus { get; set; }
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
}
public class Shippingdetails1
{
public string SellingManagerSalesRecordNumber { get; set; }
}
public class Item
{
public string ItemID { get; set; }
public string Site { get; set; }
public string Title { get; set; }
public string ConditionID { get; set; }
public string ConditionDisplayName { get; set; }
}
public class Status
{
public string PaymentHoldStatus { get; set; }
public string InquiryStatus { get; set; }
public string ReturnStatus { get; set; }
}
public class Transactionprice
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Shippingserviceselected1
{
public Shippingpackageinfo ShippingPackageInfo { get; set; }
}
public class Shippingpackageinfo
{
public DateTime EstimatedDeliveryTimeMin { get; set; }
public DateTime EstimatedDeliveryTimeMax { get; set; }
public DateTime HandleByTime { get; set; }
public DateTime MinNativeEstimatedDeliveryTime { get; set; }
public DateTime MaxNativeEstimatedDeliveryTime { get; set; }
}
public class Variation
{
public string SKU { get; set; }
public Variationspecifics VariationSpecifics { get; set; }
public string VariationTitle { get; set; }
public string VariationViewItemURL { get; set; }
}
public class Variationspecifics
{
public Namevaluelist[] NameValueList { get; set; }
}
public class Namevaluelist
{
public string Name { get; set; }
public string Value { get; set; }
}
public class Taxes
{
public Totaltaxamount TotalTaxAmount { get; set; }
public Taxdetails TaxDetails { get; set; }
}
public class Totaltaxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxdetails
{
public string Imposition { get; set; }
public string TaxDescription { get; set; }
public Taxamount TaxAmount { get; set; }
public Taxonsubtotalamount TaxOnSubtotalAmount { get; set; }
public Taxonshippingamount TaxOnShippingAmount { get; set; }
public Taxonhandlingamount TaxOnHandlingAmount { get; set; }
}
public class Taxamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonsubtotalamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonshippingamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
public class Taxonhandlingamount
{
public string currencyID { get; set; }
public string text { get; set; }
}
}
}
As answered here How to handle both a single item and an array for the same property using JSON.net
I'm trying to deserialize JSON from a url using the following code. I'm getting an empty object even though I'm downloading a valid JSON string.
public static void tryjson() {
string json = new WebClient().DownloadString("http://www.sofascore.com/football/livescore/json");
SportItem sportItem = JsonConvert.DeserializeObject<SportItem>(json);
}
Classes:
public class Sport {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
}
public class Tournament2 {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public int priority { get; set; }
public int order { get; set; }
public int uniqueId { get; set; }
public string uniqueName { get; set; }
}
public class Category {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public int priority { get; set; }
public List<object> mcc { get; set; }
public string flag { get; set; }
}
public class Season {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public string year { get; set; }
}
public class HomeScore {
public int current { get; set; }
public int period1 { get; set; }
public int normaltime { get; set; }
public int? aggregated { get; set; }
public int? penalties { get; set; }
public int? overtime { get; set; }
}
public class AwayScore {
public int current { get; set; }
public int period1 { get; set; }
public int normaltime { get; set; }
public int? aggregated { get; set; }
public int? penalties { get; set; }
public int? overtime { get; set; }
}
public class Status {
public int code { get; set; }
public string type { get; set; }
}
public class Changes {
public string changeDate { get; set; }
public List<object> changes { get; set; }
public int changeTimestamp { get; set; }
public bool hasExpired { get; set; }
public bool hasHomeChanges { get; set; }
public bool hasAwayChanges { get; set; }
}
public class RoundInfo {
public int round { get; set; }
public string name { get; set; }
}
public class Sport2 {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
}
public class HomeTeam {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public string gender { get; set; }
public List<object> subTeams { get; set; }
}
public class AwayTeam {
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public string gender { get; set; }
public List<object> subTeams { get; set; }
}
public class Odds {
public int id { get; set; }
public double odds1 { get; set; }
public double oddsX { get; set; }
public double odds2 { get; set; }
public double odds1X { get; set; }
public double oddsX2 { get; set; }
public double odds12 { get; set; }
public double liveOdds1 { get; set; }
public double liveOddsX { get; set; }
public double liveOdds2 { get; set; }
public double liveOdds1X { get; set; }
public double liveOddsX2 { get; set; }
public double liveOdds12 { get; set; }
public string fractionalOdds1 { get; set; }
public string fractionalOddsX { get; set; }
public string fractionalOdds2 { get; set; }
public string fractionalOdds1X { get; set; }
public string fractionalOddsX2 { get; set; }
public string fractionalOdds12 { get; set; }
public string liveFractionalOdds1 { get; set; }
public string liveFractionalOddsX { get; set; }
public string liveFractionalOdds2 { get; set; }
public string liveFractionalOdds1X { get; set; }
public string liveFractionalOddsX2 { get; set; }
public string liveFractionalOdds12 { get; set; }
public string americanOdds1 { get; set; }
public string americanOddsX { get; set; }
public string americanOdds2 { get; set; }
public string americanOdds1X { get; set; }
public string americanOddsX2 { get; set; }
public string americanOdds12 { get; set; }
public string liveAmericanOdds1 { get; set; }
public string liveAmericanOddsX { get; set; }
public string liveAmericanOdds2 { get; set; }
public string liveAmericanOdds1X { get; set; }
public string liveAmericanOddsX2 { get; set; }
public string liveAmericanOdds12 { get; set; }
public int odds1Change { get; set; }
public int oddsXChange { get; set; }
public int odds2Change { get; set; }
public int odds1XChange { get; set; }
public int oddsX2Change { get; set; }
public int odds12Change { get; set; }
public string bet365OddsId1 { get; set; }
public string bet365OddsIdX { get; set; }
public string bet365OddsId2 { get; set; }
public string bet365OddsId1X { get; set; }
public string bet365OddsIdX2 { get; set; }
public string bet365OddsId12 { get; set; }
public string betSlipLink1 { get; set; }
public string betSlipLinkX { get; set; }
public string betSlipLink2 { get; set; }
public string betSlipLink1X { get; set; }
public string betSlipLinkX2 { get; set; }
public string betSlipLink12 { get; set; }
public bool liveOddsEnabled { get; set; }
public bool liveDoubleChanceOddsEnabled { get; set; }
}
public class Event {
public int id { get; set; }
public string customId { get; set; }
public HomeScore homeScore { get; set; }
public AwayScore awayScore { get; set; }
public Status status { get; set; }
public int winnerCode { get; set; }
public Changes changes { get; set; }
public RoundInfo roundInfo { get; set; }
public Sport2 sport { get; set; }
public HomeTeam homeTeam { get; set; }
public AwayTeam awayTeam { get; set; }
public Odds odds { get; set; }
public bool hasHighlights { get; set; }
public bool hasHighlightsStream { get; set; }
public bool hasEventPlayerStatistics { get; set; }
public bool hasEventPlayerHeatMap { get; set; }
public int rowCount { get; set; }
public int homeRedCards { get; set; }
public int awayRedCards { get; set; }
public string statusDescription { get; set; }
public bool hasLiveForm { get; set; }
public string name { get; set; }
public string startTime { get; set; }
public string formatedStartDate { get; set; }
public int startTimestamp { get; set; }
public string slug { get; set; }
public bool hasLineupsList { get; set; }
public bool hasOdds { get; set; }
public bool hasLiveOdds { get; set; }
public bool hasFirstToServe { get; set; }
public bool hasDraw { get; set; }
public bool isSyncable { get; set; }
public int? aggregatedWinnerCode { get; set; }
}
public class Tournament {
public Tournament2 tournament { get; set; }
public Category category { get; set; }
public Season season { get; set; }
public bool hasEventPlayerStatistics { get; set; }
public bool hasEventPlayerHeatMap { get; set; }
public List<Event> events { get; set; }
}
public class SportItem {
public Sport sport { get; set; }
public int rows { get; set; }
public List<Tournament> tournaments { get; set; }
}
public class Params {
public string sport { get; set; }
public object category { get; set; }
public string date { get; set; }
}
public class RootObject {
public SportItem sportItem { get; set; }
public Params #params { get; set; }
public bool isShortDate { get; set; }
}
What am I doing wrong?
Try this:
System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadStringCompleted += (s, u) =>
{
DownloadStringCompleted(s, u);
};
wc.DownloadStringAsync(new Uri("http://www.sofascore.com/football/livescore/json"));
private void DownloadStringCompleted(object s, DownloadStringCompletedEventArgs u)
{
try
{
var Item = JsonConvert.DeserializeObject<RootObject>(u.Result.ToString());
}
catch (Exception ex)
{ }
}
It looks like you need to parse into the json object first. Example:-
var data = (JObject)JsonConvert.DeserializeObject(resultJson);