I am getting this exception:
Newtonsoft.Json.JsonReaderException HResult=0x80131500 Message=Unexpected character encountered while parsing value: {. Path 'outputObject.address', line 17, position 16.
when deserializing the response data from an API. (complete exception on the end of the post)
CODE
return JsonConvert.DeserializeObject(webResponseEntity.ResponseData, typeof(CarLookupResponse)) as CarLookupResponse; MODEL
public class CarLookupResponse : ICarLookupResponse { public ICarLookupResult Result { get; set; } public ICarLookupOutputObject OutputObject { get; set; } public CarLookupResponse() { Result = new CarLookupResult(); OutputObject = new CarLookupOutputObject(); } } Folowing is the output object interface OutputObject Interface
public interface ICarLookupOutputObject { int CarId { get; set; } string CartestId { get; set; } int[] ModelYears { get; set; } string FirstName { get; set; } string LastName { get; set; } string Email { get; set; } string SSN { get; set; } string Address { get; set; } } JSON
{ "result": { "id": 1, "value": "lookup successful.", "error": null }, "outputObject": { "CarId": 2025, "CartestId": "testing-02", "ModelYears": [ 2017, 2018 ], "firstName": "Troy", "lastName": "Aaster", "email": "[email protected]", "address": { "apartment": "", "state": "CA", "city": "BRISBANE", "zipCode": "94005", "streetAddress": "785, SPITZ BLVD" }, "ssn": "511-04-6666" } } I tried to find the reason for this exception but couldn't get it, JSON is valid, I have checked that.
Following is the full exception deatials
Newtonsoft.Json.JsonReaderException HResult=0x80131500 Message=Unexpected character encountered while parsing value: {. Path 'outputObject.address', line 17, position 16. Source=Newtonsoft.Json StackTrace: at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType) at Newtonsoft.Json.JsonTextReader.ReadAsString() at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
outputObject.addressis bound is a string, not a complex object?CarLookupOutputObjectI cannot say for sure, but since the exception is getting thrown fromNewtonsoft.Json.JsonTextReader.ReadAsString()it's likely thatCarLookupOutputObject.Addressis a string not an object, which would account for the exception.{ "CarId": 2025 }cannot be deserialized into a primitive string. See newtonsoft.com/json/help/html/serializationguide.htm#Objects