当前位置: 首页 > 面试题库 >

序列化无符号整数(ulong)数组时Json.NET崩溃

郎吉星
2023-03-14
问题内容

尝试序列化ulong数组时遇到解析器错误,看起来Json.NET库没有检查整数是带符号的还是无符号的。有人知道解决方法吗?或任何其他可以处理unsignedint的.NET Json库?

  • 编辑:下面的代码; * 它可以很好地进行序列化,但是在反序列化时会引发错误;看起来它无法满足无符号int的需求,而无需查看堆栈跟踪;
    NewTonsoft.Json.JsonReaderException : {"JSON integer 18446744073709551615 is too large or small for an Int64."}

    Value was either too large or too small for an Int64.
       at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
       at System.Convert.ToInt64(String value, IFormatProvider provider)
       at Newtonsoft.Json.JsonTextReader.ParseNumber() in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 1360



       class Program
            {
                static void Main(string[] args)
                {
                    string output = JsonConvert.SerializeObject(new ulong[] {ulong.MinValue, 20, 21, 22, ulong.MaxValue});
                    Console.WriteLine(output);

                    ulong[] array = JsonConvert.DeserializeObject<ulong[]>(output);
                    Console.WriteLine(array);

                    Console.ReadLine();
                }
            }

问题答案:

没错,JSON.Net不会处理比long.MaxValue这种情况大的值。

除了修改库的源代码外,我没有找到任何修改该行为的方法。解决方法是,您可以将其反序列化为decimal[],然后将其转换为ulong[]



 类似资料:
  • 问题内容: 我有一些自动生成的xml,其中xml的某些部分可能有多行,而有些则没有。结果是,如果只有一行,则返回一个json节点,如果我有多行,则返回带有json节点的数组。 xml可能看起来像这样 或多行 使用时将这些序列化为JSON 第一个xml变成这个 第二个 可以清楚地看到,第二个行上的Row是应该的数组,但第一个行上不是。在这种问题上是否有任何已知的解决方法,还是我需要在接收JSON的前

  • 问题内容: 我正在尝试将json数据反序列化为模型类,但是失败了。这是我的工作: 这是我的模型的样子: 您可以看到我到达这里的Json:http : //api.worldbank.org/incomeLevels/LIC/countries? format=json 这是我得到的错误: 无法将JSON数组反序列化为“ Mvc4AsyncSample.Models.CountryModel”类型。

  • 问题内容: 我正在使用JsonConvert.SerializeObject序列化模型对象。服务器希望所有字段都为字符串。我的模型对象具有数字属性和字符串属性。我无法将属性添加到模型对象。有没有一种方法可以将所有属性值序列化为字符串?我必须仅支持序列化,而不支持反序列化。 问题答案: 您甚至可以为数字类型提供自己的数字。我只是想这和它的作品- 它的快速和肮脏的,你几乎肯定希望把它扩大到支持其他数字

  • 全新的汇编需要一些无符号算术方面的帮助。从C程序转换是什么意思。 使用: Linux操作系统 美国国家科学院 x86(32位) 我想从用户那里读入一个数字。我希望这个号码没有签名。当我输入一个超过有符号整数限制的数字并使用信息寄存器时,我注意到我的寄存器存储的是负数,这意味着发生了溢出。(显然输入的数字低于max unsigned int)如何将此寄存器视为无符号,以便根据结果进行比较和跳转?

  • 问题内容: 我正在使用JSON.Net作为c#和Razor视图引擎中的大型MVC 3 Web应用程序的序列化器。对于一个视图中的初始页面加载,在脚本标记中使用倾倒了大量JSON 。 问题在于某些对象的某些值包含撇号(例如O’Brien之类的名称),JSON.Net不会以任何方式转义或编码。 不能对存储在数据库中的值进行预编码,因为这会使其他各种过程变得非常复杂。 有没有一种方法可以强制JSON.N

  • 我正在简单的C程序中试验无符号int数据类型和主方法参数。作为一个实验,我写了一个程序,从命令行获取一个int数作为main方法的参数,并对该数和0之间的每个整数求和。 例如,程序计算 f(n) = (1 2 3... n) 当 n 时有效 我开始注意到的第一件事是当f(n) 我手动发现数学上的最大值,我的程序生成的结果将是有效的(例如,在整数溢出之前),对于有符号整数为65535,对于无符号in