最近在研究一個有趣的資料交換格式 —— TOON (Token-Oriented Object Notation)
主打「低 Token 消耗」與「高結構可讀性」
由於目前 TOON 也開始有 .NET 的實作版本(例如 ToonNet 與 ToonSharp)
我就想測試一下它在實際序列化(Serialize)與反序列化(Deserialize)時的表現如何
最後我採用 ToonNet ,原因我最後在說
我用的是一個模擬假資料的模型 SampleData,裡面包含常見欄位像是 Id, Name, Email, Age, Salary ..
並且每筆資料還會有一個小的好友清單 Friends,裡面會有兩筆資料
這次測試使用 Bogus 套件來生成 10,000 筆測試資料,加上好友的大概會有三萬個物件
- >(toonStr);
Console.WriteLine("TOON Deserialize List Count:" + newToonData.Count());
Console.WriteLine(sw.Elapsed);
Console.WriteLine("--\r\n");
//TEST JSON
var sw1 = Stopwatch.StartNew();
var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(data);
Console.WriteLine("JSON Length:" + jsonStr.Length);
Console.WriteLine(sw1.Elapsed);
sw1.Restart();
Console.WriteLine("JSON Deserialize List Count:" + Newtonsoft.Json.JsonConvert.DeserializeObject
- >(jsonStr).Count());
Console.WriteLine(sw1.Elapsed);
Console.WriteLine("==\r\n");
}
這段程式邏輯很單純,就是:
先產生資料;
使用 ToonNet 做序列化與反序列化;
接著使用 JSON (Newtonsoft.Json) 做同樣的動作;
最後印出資料長度與執行時間。
結果:
很明顯測試,序列化之後的確文字體積變小了,但是在序列化跟反序列化中速度都不如行之有年的 JSON.net
不過可能隨著之後的進步會有所加速,說一下為何最後我不用 ToonSharp 因為不知道為什麼,在反序列化的過程中
他會一直出現
Unhandled exception. ToonSharp .ToonException: Line 100002: Array count mismatch: expected 10000 items, got 1
目前看起來無解,網路上查一下也沒有答案,我就換套件測試,當然這不能說 TOON 一定慢於 JSON
畢竟這跟套件的成熟度也會有很大的關係。
--
Before you read this, the article was in a superposition of human and AI. Upon observation, the wave function collapsed into a sleep-deprived developer.
如果這篇文章有幫助到您幫我分享一下,讓我有寫下去的動力...