c# - Xamarin - Json 反序列化不适用于导出的 Android apk
问题描述
我有一个包含 4 个对象列表(Ambiente、Empresa、Filial e Projeto)的用户模型类的项目。当我从 web 服务(使用 Newtonsoft.Json)获取 Json 数据时,json 代码是正确的,但是在反序列化这些对象列表时,它们在 User 类中总是出现 null。
将链接设置为 SDK Only 后,使用 [Preserve (AllMembers = true)],在 Release 和 Debug 中运行项目时,反序列化工作正常。
我还在 android MainActivity 的 OnCreate 方法中添加了这个:
受保护的覆盖无效 OnCreate(捆绑包) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = 资源.Layout.Toolbar; 如果(假标志){ var falseJC = new Newtonsoft.Json.Converters.BinaryConverter(); } base.OnCreate(捆绑); }
这是 User 类和对象列表:
[保留(所有成员 = true)] 公共课 Usuario { 公共字符串登录{获取;放; } 公共 int SessionId { 获取;放; } 公共字符串名称 { 获取;放; } 公共字符串电子邮件{获取;放; } 公共 int EmpresaId { 获取;放; } 公共 int FilialId { 获取;放; } 公共 int ProjetoId { 获取;放; } 公共日期时间数据登录 { 获取;放; } 公共对象矩阵{得到; 放; } 公共对象服务器{获取;放; } 公共字符串 Senha { 获取;放; } 公共字符串环境{获取;放; } 公共字符串成语{得到; 放; } 公共字符串设备{获取;放; } 公共字符串 Acesso { 获取;放; } 公共字符串 AmbienteSelecionado { 获取;放; } [JsonProperty(PropertyName = "环境")] 公共列表环境{获取;放; } 公共列表 Empresas { 获取;放; } 公共列表 Filiais { 获取;放; } 公开列表 Projetos { 获取;放; } } [保留(所有成员 = true)] 公共课环境 { [JsonProperty(PropertyName = "SGENVIRONMENT")] 公共字符串 AmbienteId { 获取;放; } [JsonProperty(PropertyName = "DSENVIRONMENT")] 公共字符串 AmbienteNome { 获取;放; } } [保留(所有成员 = true)] 公开课 Empresa { 公共 int EmpresaId { 获取;放; } 公共字符串 RazaoSocial { 获取;放; } } [保留(所有成员 = true)] 公共课孝顺 { 公共 int FilialId { 获取;放; } 公共 int EmpresaId { 获取;放; } 公共字符串标题{获取;放; } } [保留(所有成员 = true)] 公共课项目 { 公共 int ProjetoId { 获取;放; } 公共字符串标题{获取;放; } 公共 int EmpresaId { 获取;放; } 公共 int FilialId { 获取;放; } }
这就是 json 被反序列化的地方:
Usuario jsonUsuario = JsonConvert.DeserializeObject(json.message.ToString());
一周前,甚至在执行此代码之前,反序列化就起作用了。然后它突然停止在任何情况下工作,没有更改任何代码。
然后我在上面做了所有这些更改,使反序列化在 Visual Studio 上的 Release / Debug 上工作,但是在导出 apk 并运行它时,对象仍然为 Null。
当使用 TraceWriter 拦截反序列化时,日志显示如下:
2020-06-04T18:03:27.142 信息无法将值反序列化为 Gestor_Coletor_A.Models.Usuario 上的不可写属性“Ambientes”。路径“Ambientes”,第 1 行,位置 289。
2020-06-04T18:03:27.161 信息无法将值反序列化为 Gestor_Coletor_A.Models.Usuario 上的不可写属性“Empresas”。路径“Empresas”,第 1 行,位置
560。2020-06-04T18:03:27.171 信息无法将值反序列化为 Gestor_Coletor_A.Models.Usuario 上的不可写属性“Filiais”。路径“Filiais”,第 1 行,位置 838。
2020-06-04T18:03:27.182 信息无法将值反序列化为 Gestor_Coletor_A.Models.Usuario 上的不可写属性“Projetos”。路径“Projetos”,第 1 行,位置 1100。
为什么对象列表被认为是“不可写属性”?它们都是公共的,没有使用私有变量。
我做错了什么?
我必须让它在导出的 apk 上工作。
任何帮助,将不胜感激。
谢谢。
解决方案
推荐阅读
- android - 任何人都有数据绑定错误:错误:找不到符号
- web-scraping - 从investing.com 获取历史股票价格到谷歌表格
- node.js - Dynamo DB 查询通过 axios 失败,“tableName”处的值为 null 未能满足约束
- go - 错误 1064 (42000):在 manticore 中没有这样的本地索引
- python - 我是否必须在同一范围内调用 py::initialize_interpreter() 和 py::finalize_interpreter() ?
- c# - SignalR 在服务器上获取不记名令牌
- icc - 安装 Intel oneAPI 后找不到 icc 编译器,在 Ubuntu 20 上从 bash 调用
- php - PHP Slim v3 post 方法 405(使用 POSTMAN 测试!)
- oracle - 防止 FAST_PCT mview 刷新
- google-cloud-build - PROJECT_ID env 和 Secret Manager 访问