[心得] System.Text.Json与Json.NET比较

楼主: erspicu (.)   2020-11-10 17:59:53
测试JSON
https://github.com/trebonian/visual6502/blob/master/segdefs.js
下载后要移除开头 "var segdefs =" 字串
json.net 测试环境
.net framework 4.8
nuget 安装最新 Newtonsoft.Json 12.0.3
try
{
string json_str = File.ReadAllText(Application.StartupPath +
@"\segdefs.js");
object json_obj = JsonConvert.DeserializeObject<object>
( json_str );
Console.WriteLine(st.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
顺利parse成物件 经测试能相容 /*....*/ 或是 // js的注解
system.text.json测试环境
.NET Core 3.1
try
{
string json_str = File.ReadAllText(Application.StartupPath +
@"\segdefs.js");
object json_obj =
JsonSerializer.Deserialize<object>(json_str);
Console.WriteLine(st.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
无法处理JS /* .... */ 或是 // 注解 另外PARSE失败
例外讯息
''' is an invalid start of a value. Path: $ |
LineNumber: 1 | BytePositionInLine: 6.
我是搞不太懂原因 不知道是不是单一资料量太大 或是
SAMPLE档格式有些规范标准问题
测试过小一点的其他JSON档是OK
目前测试一下马上踩雷..... 假若system.text.json处理JSON上有些问题
建议回到JSON.NET试试看
因为连PARSE都有问题 就不做速度上的比较了
作者: ssccg (23)   2020-11-10 18:32:00
JSON parser为什么要相容JS... 那就不是JSON啊因为方便选择能吃JSON也能吃JS的parser是一回事,不过这是资料有问题,不是parser有问题另外那个错误讯息是说JSON String只有""没有'',JS才都有你错了,JSON是从JS来的没错,但JSON的定义不是JS的物件https://tools.ietf.org/html/rfc8259是有自己一套定义的,而这套定义也不完全是JS的subset相容性高是方便,但不见得完全是好处,至少自己一定要清楚是哪里不一样,不然有时候给别人错的资料都不知道

Links booklink

Contact Us: admin [ a t ] ucptt.com