I want to deserialize data from simple API but i have problem, since one keys can take different types of returned data:
I. First option - "value" key as simple object
"meta_data":{
"id": 83487,
"key": "_billing_invoice_ask",
"value": "1"
}
II. Second option - "value" key as array
"meta_data":{
"id": 83490,
"key": "apaczka_delivery_point",
"value": {
"apm_access_point_id": "9993",
"apm_supplier": "INPOST",
"apm_name": "Parking",
"apm_foreign_access_point_id": "NWJ01N",
"apm_street": "Street name",
"apm_city": "City",
"apm_postal_code": "00-002",
"apm_country_code": "PL"
}
}
I create meta_data model and i want serialize data from API to this model
public class meta_data
{
public int id { get; set; }
public string key { get; set; }
public string value { get; set; }
}
public class api_class{
//some code responsible for getting data from api
meta_data data = JsonConvert.DeserializeObject<meta_data>(response.Content);
}
When API return "value" as simple object everythink is ok, but if API return "value" as array i got error:
This exception was originally thrown at this call stack:
Newtonsoft.Json.JsonTextReader.ReadStringValue(Newtonsoft.Json.ReadType)
Newtonsoft.Json.JsonTextReader.ReadAsString()
Newtonsoft.Json.JsonReader.ReadForType(Newtonsoft.Json.Serialization.JsonContract, bool)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(object, Newtonsoft.Json.JsonReader, Newtonsoft.Json.Serialization.JsonObjectContract, Newtonsoft.Json.Serialization.JsonProperty, string)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(Newtonsoft.Json.JsonReader, System.Type, Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json.Serialization.JsonProperty, Newtonsoft.Json.Serialization.JsonContainerContract, Newtonsoft.Json.Serialization.JsonProperty, object)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonReader, System.Type, Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json.Serialization.JsonProperty, Newtonsoft.Json.Serialization.JsonContainerContract, Newtonsoft.Json.Serialization.JsonProperty, object)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(System.Collections.IList, Newtonsoft.Json.JsonReader, Newtonsoft.Json.Serialization.JsonArrayContract, Newtonsoft.Json.Serialization.JsonProperty, string)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(Newtonsoft.Json.JsonReader, System.Type, Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json.Serialization.JsonProperty, object, string)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonReader, System.Type, Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json.Serialization.JsonProperty, Newtonsoft.Json.Serialization.JsonContainerContract, Newtonsoft.Json.Serialization.JsonProperty, object)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(Newtonsoft.Json.Serialization.JsonProperty, Newtonsoft.Json.JsonConverter, Newtonsoft.Json.Serialization.JsonContainerContract, Newtonsoft.Json.Serialization.JsonProperty, Newtonsoft.Json.JsonReader, object)
...
[Call Stack Truncated]
Actually, I only need the value of the field "value", if it's not an array (just a simple object). Therefore, I modified the model a bit:
public class meta_data
{
public int id { get; set; }
public string key { get; set; }
public string value
{
get
{
return value;
}
set
{
if (value is not string)
{
this.value = "";
};
}
}
}
However, I am getting the same error.