.net core System.Text.Json vs Newtonsoft.Json

Po-Ching Liu
Mar 10, 2021

--

每個開發 .net 的人對於 Newtonsoft.Json 套件肯定都不陌生,它幫助我們日常開發時物件的序列化、反序列化以及掛載 JsonPropertyName 等。但是 .net 在 .net core內建了 System.Text.Json 這套類似於 Newtonsoft.Json 功能的套件,不過在使用上還是有些許的差異,廢話不多說,以下是我目前親自踩到的雷整理後分享給大家。

System.Text.Json Newtonsoft.Json 差異

  1. String, Int 型態轉換
  2. Property 大小寫mapping

String, Int 型態轉換

在Newtonsoft.Json中,物件反序列化若內容為純數字則接起物件的property可為String or Int 皆可,也就是說附圖的測試都可以過。

但在 System.Text.Json 中,對於這樣的轉換則較為嚴格,這樣的case則會噴錯,一樣如下圖。

由上圖兩個測試可得知,System.Text.Json 比 Newtonsoft.Json規範更來的嚴格。筆者是在與第三方串接時發現這個問題,第三方的文件上規格定義 String,但是實作時發現傳來的 raw value是 Int 。

不過如果堅持要使用 System.Text.Json 解決上述型態問題,則可以自製converter

Property 大小寫mapping

在Newtonsoft.Json中,反序列化前Property 大小寫會自動幫你轉換,System.Text.Json則相反,不囉嗦,一樣先上圖。

在 System.Text.Json 中,對於大小寫得的轉換則較為嚴格,這樣的case物件則接不起來值,一樣如下圖。

總結 : 在.net core 中使用 System.Text.Json 請注意"大小寫""型態轉換",在Newtonsoft.Json 因為已經幫你轉換了,因此可以安心使用,但是他的效能會差一點 (Reference)。

--

--