【发布时间】:2019-03-03 21:56:50
【问题描述】:
我不知道如何解决这个问题。作为开始解决这个问题的一种方法,我所能想到的就是我的开发机器是 32 位的,而其他经过测试的计算机是 64 位的(顺便说一句,我周围没有其他 32 位机器可以测试)。无论如何,这是一个奇怪的场景。
现在问题来了:
我在我的 c# 应用程序中使用 Newtonsoft JSON library。我有以下 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 位电脑,而他们的电脑是 64 位电脑。
另外,作为提供更多信息的一种方式,由于 JSON 转储是在我的 Laravel 后端使用 Monolog 完成的,我可以看到 Chrome 中的 DOM 检查器,如下注释:
相同的 Newtonsoft Json 库在所有这些机器上运行。
【问题讨论】:
-
您应该粘贴文本而不是屏幕截图。
-
@Aybe 请再仔细阅读问题,以便您了解图片对应的文字已经提供(图片是为了更深入地了解已经提供的文字)
-
不,您没有在第二张屏幕截图上粘贴要突出显示的代码。
-
@Aybe 这不是亮点 - 它只是 Chrome 检查器显示的内容。当我尝试将其复制并粘贴到此处时,它只会更改为那些看起来像向后箭头的字符。您可以尝试选择该箭头中的那些字符系列,以了解那里发生了什么!
-
查看w3schools.com/charsets/ref_utf_punctuation.asp 并查看您的代码,这应该可以为您提供有关幕后情况的线索;我猜应该涉及一些不变的文化或规范化?即都是不可见的字符,生成 JSON 时,该用户的 PC 出现问题。