c# - C# Newtonsoft JSON 库为不同计算机上的同一数据集输出不同的错误 JSON 键
问题描述
我不知道如何解决这个问题。作为开始解决这个问题的一种方法,我所能想到的就是我的开发机器是 32 位的,而其他经过测试的计算机是 64 位的(顺便说一句,我周围没有其他 32 位机器可以测试)。无论如何,这是一个奇怪的场景。
现在到这个问题:
我在我的 c# 应用程序中使用Newtonsoft JSON 库。我有以下 c# 类要序列化:
class sync_object
{
//newtonJson give bad keys to these object names on 64bit systems
public Dictionary<string, List<Dictionary<string, string>>> table_records { get; set; }
public Dictionary<string, List<string>> class_list_with_subjects_offered { get; set; }
public Dictionary<string, List<string>> class_list_with_scoreheads_offered { get; set; }
public List<string> class_groups_ordered { get; set; }
}
在创建一个实例sync_object
并用数据填充它之后,我做了JsonConvert.SerializeObject(instance_of_sync_object)
并发送到我的服务器。然后,当我记录在服务器端(Laravel PHP)收到的 JSON 时,我得到一个完美的 JSON 转储到 PHP 中,如下所示:
array ( 'table_records' => array ( 'personal_db' => array (...) ) , 'class_groups' => array(...) )
但是,在其他 2 台计算机(我的应用程序用户)上,我得到了与上面相同的 JSON 结构,但唯一的区别是所有第一级 JSON 键(如上面的“table_groups”和“class_groups_ordered”)都被替换为跟随奇怪的字符(您可能想使用光标选择它以观察它包含许多不可打印的字符):
'' =>
正如我之前提到的,这些计算机和我的唯一明显区别是我的计算机是 32 位 PC,而他们的计算机是 64 位。
此外,作为提供更多信息的一种方式,由于 JSON 转储是在我的 Laravel 后端使用 Monolog 完成的,因此我可以看到 Chrome 中的 DOM 检查器,如下所示:
所有这些机器上都运行相同的 Newtonsoft Json 库。
解决方案
本能地,我将所有的 snake_case 对象属性名称都更改为 PascalCase,噩梦就结束了!
(注意:我在Newtonsoft JSON 文档中没有发现任何表明属性名称的大小写在数据序列化中很重要的内容)
推荐阅读
- tensorflow - 根据 Tensorflow 中的自定义 PDF 采样的随机布尔掩码
- java - 将构建属性写入 Java 工件
- angular - 仅当在 angular monorepo 中更改时才发布 npm
- visual-studio-code - 为什么我的 node_modules 文件夹在命令“npm install”后显示为灰色?
- c# - 如何使用 C# 替换请求 url 中的参数?
- java - ZipEntry 中的额外字节用于什么?
- dart - 如何将 json_annotation 与 Dart 扩展 ListBase 类一起使用
- insert - 通过 Dafny 实现堆插入(带规范)
- python - 如何使用 PonyORM 动态创建实体?
- flutter - Flutter - 如何在 TabBarView 的主体内导航?