C# 如何解决;无法将当前JSON数组反序列化为类型,因为该类型需要一个JSON对象才能正确反序列化;
我是Xamarin和Web服务领域的新手,我一直在尝试解决一个反序列化问题,但不断出现上面的错误,请在下面找到JSON响应、模型和视图模型代码。我一直在尝试几种解决方案,但都无济于事。我想这可能是我的模型上的东西,但我不能完全确定。任何帮助都将不胜感激 JSON响应C# 如何解决;无法将当前JSON数组反序列化为类型,因为该类型需要一个JSON对象才能正确反序列化;,c#,json,xamarin,deserialization,viewmodel,C#,Json,Xamarin,Deserialization,Viewmodel,我是Xamarin和Web服务领域的新手,我一直在尝试解决一个反序列化问题,但不断出现上面的错误,请在下面找到JSON响应、模型和视图模型代码。我一直在尝试几种解决方案,但都无济于事。我想这可能是我的模型上的东西,但我不能完全确定。任何帮助都将不胜感激 JSON响应 { "$id": "1", "$values": [ { "$id": "2"
{
"$id": "1",
"$values": [
{
"$id": "2",
"Contrato_Id": "FRANOPRA",
"Emision_Id": "BANME 0159755",
"Tipo_Custodia_Id": 100,
"Institucion_Deposito_Id": 5,
"Portafolio_Tit_Imp": 94768.0,
"Portafolio_Costo_Promedio": 17.895753297132128,
"Portafolio_Comprometido": 0.0,
"Portafolio_TIR": 0.0,
"Portafolio_Plazo": 0.0,
"Contrato": null
},
{
"$id": "3",
"Contrato_Id": "FRANOPRA",
"Emision_Id": "DOIXCB 15U",
"Tipo_Custodia_Id": 100,
"Institucion_Deposito_Id": 5,
"Portafolio_Tit_Imp": 13000.0,
"Portafolio_Costo_Promedio": 13.0,
"Portafolio_Comprometido": 0.0,
"Portafolio_TIR": 0.0,
"Portafolio_Plazo": 0.0,
"Contrato": null
},
{
"$id": "4",
"Contrato_Id": "FRANOPRA",
"Emision_Id": "EFECTIVO",
"Tipo_Custodia_Id": 5,
"Institucion_Deposito_Id": 5,
"Portafolio_Tit_Imp": 1.1271450007334352,
"Portafolio_Costo_Promedio": 1.0,
"Portafolio_Comprometido": 0.0,
"Portafolio_TIR": 0.0,
"Portafolio_Plazo": 0.0,
"Contrato": null
},
{
"$id": "5",
"Contrato_Id": "FRANOPRA",
"Emision_Id": "FT-LIQUA",
"Tipo_Custodia_Id": 100,
"Institucion_Deposito_Id": 5,
"Portafolio_Tit_Imp": 692631.0,
"Portafolio_Costo_Promedio": 1.007334,
"Portafolio_Comprometido": 692631.0,
"Portafolio_TIR": 0.0,
"Portafolio_Plazo": 0.0,
"Contrato": null
},
{
"$id": "6",
"Contrato_Id": "FRANOPRA",
"Emision_Id": "TEMAGIALX",
"Tipo_Custodia_Id": 100,
"Institucion_Deposito_Id": 5,
"Portafolio_Tit_Imp": 456250.0,
"Portafolio_Costo_Promedio": 456.72739371178523,
"Portafolio_Comprometido": 0.0,
"Portafolio_TIR": 0.0,
"Portafolio_Plazo": 0.0,
"Contrato": null
}
]
}
模型
视图模型
private async void GetDataAsync()
{
HttpClient httpClient = new HttpClient();
var response = await httpClient.GetAsync("http://192.168.1.69/ApiTest/Api/Portafolio/FRANOPRA");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
//Error on deserializer
var positions = JsonConvert.DeserializeObject<PositionsModel>(content);
portafolioInfo = new List<PositionsModel>((IEnumerable<PositionsModel>)positions);
}
}
private async void GetDataAsync()
{
HttpClient HttpClient=新HttpClient();
var response=wait httpClient.GetAsync(“http://192.168.1.69/ApiTest/Api/Portafolio/FRANOPRA");
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
//反序列化程序出错
var positions=JsonConvert.DeserializeObject(内容);
portafolioInfo=新列表((IEnumerable)位置);
}
}
问题在于键中的$,因为它表示元数据,而不是实际的数据字段,所以您需要忽略它,以获得预期的结果,如以下代码所示:
JsonSerializerSettings settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore
};
var position = JsonConvert.DeserializeObject<PositionsModel>(json, settings);
List<PositionsModel> portafolioInfo = new List<PositionsModel> { position };
JsonSerializerSettings设置=新的JsonSerializerSettings
{
MetadataPropertyHandling=MetadataPropertyHandling.Ignore
};
var position=JsonConvert.DeserializeObject(json,设置);
List portafolioInfo=新列表{position};
小提琴:
我希望这对您有所帮助。首先,您为什么要反序列化
jObject.ToString()
而不是内容
?我的错,忘了更改它,但这不是问题所在。
JsonSerializerSettings settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore
};
var position = JsonConvert.DeserializeObject<PositionsModel>(json, settings);
List<PositionsModel> portafolioInfo = new List<PositionsModel> { position };