C# 如何解决;无法将当前JSON数组反序列化为类型,因为该类型需要一个JSON对象才能正确反序列化;

C# 如何解决;无法将当前JSON数组反序列化为类型,因为该类型需要一个JSON对象才能正确反序列化;,c#,json,xamarin,deserialization,viewmodel,C#,Json,Xamarin,Deserialization,Viewmodel,我是Xamarin和Web服务领域的新手,我一直在尝试解决一个反序列化问题,但不断出现上面的错误,请在下面找到JSON响应、模型和视图模型代码。我一直在尝试几种解决方案,但都无济于事。我想这可能是我的模型上的东西,但我不能完全确定。任何帮助都将不胜感激 JSON响应 { "$id": "1", "$values": [ { "$id": "2"

我是Xamarin和Web服务领域的新手,我一直在尝试解决一个反序列化问题,但不断出现上面的错误,请在下面找到JSON响应、模型和视图模型代码。我一直在尝试几种解决方案,但都无济于事。我想这可能是我的模型上的东西,但我不能完全确定。任何帮助都将不胜感激

JSON响应

{
    "$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 };