Xamarin C#将JSON值转换为System.Collections.Generic.List类型报错如何解决
错误原因
- 执行了多余的序列化操作:你从二维码解密得到的
text本身就是合法JSON字符串,你额外调用JsonConvert.SerializeObject(text),相当于把JSON字符串再次序列化为带转义符的普通字符串,此时jsonInscripcion的内容不是对象结构的JSON,无法匹配目标模型。 - 反序列化类型不匹配:你提供的JSON是单个
InscripcionesModel对象,并不是对象数组,直接反序列化为List<InscripcionesModel>会触发类型不匹配错误。
解决方法
调整对应代码逻辑即可,修改后的核心代码如下:
if (result != null) { // 解密直接得到原始JSON var text = Encriptacion.Decrypt(result.ToString()); var Inscripciones = new HttpClient(); // 直接用原始JSON构造请求体,无需二次序列化 var contentJsonInscripcion = new StringContent(text, Encoding.UTF8, "application/json"); // 直接反序列化为单个InscripcionesModel对象 var DatosRegistro = JsonConvert.DeserializeObject<InscripcionesModel>(text); await DisplayAlert("Mensaje", DatosRegistro.DNI, "OK"); RegistrosModel registro = new RegistrosModel { Fecha_hora = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), Dni = DatosRegistro.DNI, Id_inscripcion = DatosRegistro.Id_inscripcion, Id_disciplina = DatosRegistro.Id_disciplina }; // PUT请求拼接参数直接用对象属性即可,无需取下标 var respoonseInscripcion = await Inscripciones.PutAsync(urlInscripcion + DatosRegistro.Id_inscripcion.ToString(), contentJsonInscripcion); // 剩余后续逻辑保持不变 }
内容的提问来源于stack exchange,提问作者Alejo Fontao
相关产品推荐
相关产品推荐

