一尘不染

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

json

尝试序列化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();
                }
            }

阅读 379

收藏
2020-07-27

共1个答案

一尘不染

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

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

2020-07-27