首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 三大 JSON 函式庫限制比較:Json.NET、ASP.NET AJAX、AjaxPro

     編輯:關於.NET

前言

.NET 生態系中常用的 JSON 序列化函式庫各有優缺,本文實測比較 Json.NET (Newtonsoft.Json)、ASP.NET AJAX (System.Web.Script.Serialization)、AjaxPro 在基礎型別、日期處理、型別資訊輸出三大場景的限制與表現。

1. Json.NET (Newtonsoft.Json) — 速度最快、功能最全,但拒絕序列化裸基礎型別

問題:無法直接序列化 string、int 等基礎型別


string test = Newtonsoft.Json.JavaScriptConvert.SerializeObject("Hello World");
// 拋出例外: Token String in state Start would result in an invalid JavaScript object.

原因

Json.NET 要求 JSON 根節點必須是物件 {...} 或陣列 [...],符合 RFC 4627 (舊標準)。雖然 RFC 7159 已放寬允許任意 JSON 值為根節點,但舊版本嚴格檢查。

解決方法

  • 升級至 Json.NET 6.0+ (支援 SerializeObject 基礎型別)
  • 或將值包裝在匿名物件:new { Value = "Hello World" }
  • 或使用 JValue:JValue.CreateString("Hello World").ToString()

2. ASP.NET AJAX (System.Web.Script.Serialization.JavaScriptSerializer) — 內建無需額外參考,但日期格式非標準

用法


var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string json = serializer.Serialize(new Store());
Store store = serializer.Deserialize<Store>(json);

問題:日期序列化為 \/Date(1264118400000)\/

  • 前端 JavaScript 無法直接用 new Date(...) 處理
  • 需手工解析時間戳:new Date(parseInt(jsonDate.substr(6)))
  • Json.NET 輸出標準 new Date(1264118400000) 或 ISO 8601 格式,前端可直接使用

適用場景

.NET 3.5 內建、無法引入外部套件的舊專案維護;新專案建議改用 Json.NET 或 System.Text.Json。

3. AjaxPro — 輕量級 Ajax 框架,但輸出冗長型別資訊

序列化輸出範例


{
  "__type": "TestPage_JQuery_TestJSONPage+Store, App_Web_tnrikb42, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
  "Property1": "Value1",
  ...
}

問題

  • __type 欄位包含完整組件資訊,導致 JSON 體積膨脹近一倍
  • 作者說明用途:支援 ArrayList 多型反序列化、繼承階層正確還原子類別屬性

適用場景

極少見,除非有特殊多型集合反序列化需求且不介意體積;一般專案不建議使用。

比較總結表

維度Json.NETASP.NET AJAXAjaxPro
基礎型別序列化舊版不支援,新版支援支援支援
日期格式ISO 8601 / new Date(ms) (可配置)Microsoft 專屬 \/Date(ms)\/ISO 8601
型別資訊輸出可選 (TypeNameHandling)不輸出強制輸出 __type
效能最快中等中等
功能豐富度最高 (LINQ to JSON、Schema、自訂 Converter)基礎基礎
相依性NuGet 套件.NET 3.5+ 內建 (System.Web.Extensions)獨立套件
現代建議⭐ 首選舊專案維護不建議

現代最佳選擇:System.Text.Json (.NET Core 3.0+ / .NET 5+)

  • 高效能、零相依、內建於執行階段
  • 預設支援基礎型別根節點、ISO 8601 日期、可選多型序列化
  • API 設計現代、支援非同步串流讀寫

結語

Json.NET 仍是功能最完整的選擇,但需注意版本對基礎型別根節點的支援。ASP.NET AJAX 日期格式不標準,僅適合舊專案。AjaxPro 型別資訊冗長,一般專案不適用。新專案請優先使用 System.Text.Json。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved