gpt4 book ai didi

C# Newtonsoft JSON 库在不同计算机上为同一数据集输出不同的错误 JSON 键

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:48 25 4
gpt4 key购买 nike

我不知道如何解决这个问题。我所能想到的开始解决这个问题的方法是,我的开发机器运行良好,是 32 位的,而其他经过测试的计算机是 64 位的(顺便说一下,我周围没有其他 32 位机器可以测试)。无论如何,这是一个奇怪的场景。

现在的问题:

我正在使用 Newtonsoft JSON library在我的 C# 应用程序中。我有以下要序列化的 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(...) )

但是,在另外两台计算机(我的应用程序用户)上,我得到了与上面相同的 JSON 结构,但唯一的区别是所有第一级 JSON 键(如上面的“table_groups”和“class_groups_ordered”)都得到了替换为以下奇怪的字符(您可能想使用光标选择它以观察它包含很多不可打印的字符):

'‮‫‫‮‮‌​‎​‭‎‏‮‎​‎‪‭‪​‍‮‬‌‏‬‮' => 

正如我之前提到的,这些计算机与我的唯一明显区别是我的是 32 位 PC,而他们的是 64 位。

此外,作为提供更多信息的一种方式,由于 JSON 转储是在我的 Laravel 后端使用 Monolog 完成的,因此我可以查看 Chrome 中的 DOM 检查器,如下所示:

我的普通 JSON: enter image description here

来自其他人的奇怪 JSON: enter image description here

相同的 Newtonsoft Json 库在所有这些机器上运行。

最佳答案

出于本能,我将所有 snake_case 对象属性名称更改为 PascalCase,噩梦结束了!

(注意:我在 Newtonsoft JSON documentation 上没有发现任何表明属性名称大小写在数据序列化中很重要的内容)

关于C# Newtonsoft JSON 库在不同计算机上为同一数据集输出不同的错误 JSON 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54974145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com