私はこの例外を受けています:
Newtonsoft.Json.JsonReaderException HResult = 0x80131500 Message =値の解析中に予期しない文字が見つかりました:{。パス 'outputObject.address'、17行目、16桁目。
aPIからの応答データを逆シリアル化するとき。 (投稿の最後の完全な例外)
[〜#〜]コード[〜#〜]
return JsonConvert.DeserializeObject(webResponseEntity.ResponseData, typeof(CarLookupResponse)) as CarLookupResponse;
[〜#〜]モデル[〜#〜]
public class CarLookupResponse : ICarLookupResponse
{
public ICarLookupResult Result { get; set; }
public ICarLookupOutputObject OutputObject { get; set; }
public CarLookupResponse()
{
Result = new CarLookupResult();
OutputObject = new CarLookupOutputObject();
}
}
Folowingは出力オブジェクトインターフェイスです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"
}
}
この例外の理由を見つけようとしましたが、取得できませんでした[〜#〜] json [〜#〜]は有効であることを確認しました。
以下は、例外の完全な例外です
Newtonsoft.Json.JsonReaderException HResult = 0x80131500 Message =値の解析中に予期しない文字が見つかりました:{。パス 'outputObject.address'、17行目、16行目。Source= Newtonsoft.Json StackTrace:at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType)at Newtonsoft.Json.JsonTextReader.ReadAsString()at Newtonsoft.Json.JsonReader.ReadForType (JsonContractコントラクト、ブールhasConverter)at Newtonsoft.Json.Serialization.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject、JsonReader reader、JsonObjectContract contract、JsonProperty member、String id)at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader、Type JsonContractコントラクト、JsonPropertyメンバー、JsonContainerContract containerContract、JsonProperty containerMember、Object existingValue)at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property、JsonConverter propertyConverter、JsonContainerContract containerContract、JsonProperty containerProperty、JsonReader atizationJonReader。 .JsonSeriali Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader、Type objectType、JsonContractコントラクト、JsonPropertyメンバー、JsonContainerContractコンテナーコンテナ、JsonPropertyコンテナーのzerInternalReader.PopulateObject(Object newObject、JsonReaderリーダー、JsonObjectContractコントラクト、JsonPropertyメンバー、String id) )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(Type 、JsonSerializerSettings設定)
あなたの問題は、CarLookupOutputObject.Address
をstring
として宣言したことですが、対応するJSON値はオブジェクトです:
"address": {
"apartment": "",
...
},
シリアル化ガイド で説明されているように、プリミティブな.Netタイプとstring
に変換可能なタイプのみがJSON文字列としてシリアル化されます。 "address"
の値はプリミティブではないため、例外がスローされます。
代わりに、 http://json2csharp.com/ で推奨されているように、データモデルを次のように変更します。
public class CarLookupOutputObject
{
public Address address { get; set; }
// Remainder unchanged
}
public class Address
{
public string apartment { get; set; }
public string state { get; set; }
public string city { get; set; }
public string zipCode { get; set; }
public string streetAddress { get; set; }
}