[心得] 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