Json.NET (Newtonsoft.Json) 是 .NET 生態系最廣泛使用的 JSON 處理庫,特點:
| 方法 | 說明 |
|---|---|
SerializeObject(object) | 物件 → JSON 字串 |
DeserializeObject<T>(string) | JSON 字串 → 強型別物件 |
DeserializeObject(string, Type) | JSON 字串 → 指定型別物件 (非泛型) |
SerializeObject(object, settings) | 自訂序列化設定 |
public class Employee
{
public int EmployeeID { get; set; }
public string EmployeeName { get; set; }
public string[] EmployeeInfo { get; set; } // 陣列支援
}
[WebService(Namespace = "https://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class EmployeeService : System.Web.Services.WebService
{
[WebMethod]
public string ToJson(int employeeID, string employeeName, string[] employeeInfo)
{
var emp = new Employee
{
EmployeeID = employeeID,
EmployeeName = employeeName,
EmployeeInfo = employeeInfo
};
// 物件 → JSON
return JsonConvert.SerializeObject(emp);
}
[WebMethod]
public string FromJson(string jsonString)
{
// JSON → 物件
var emp = JsonConvert.DeserializeObject(jsonString);
return $"ID: {emp.EmployeeID}, Name: {emp.EmployeeName}, Info: {string.Join(", ", emp.EmployeeInfo)}";
}
}
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services><asp:ServiceReference Path="~/EmployeeService.asmx" /></Services>
</asp:ScriptManager>
<input type="text" id="txtID" placeholder="員工編號" />
<input type="text" id="txtName" placeholder="姓名" />
<textarea id="txtInfo" placeholder="資訊(逗號分隔)"></textarea>
<button onclick="toJson()">序列化為 JSON反序列化
4. 執行結果展示

進階序列化設定
var settings = new JsonSerializerSettings
{
// 命名策略:CamelCase (JS 慣例)
ContractResolver = new CamelCasePropertyNamesContractResolver(),
// 日期格式:ISO 8601
DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffZ",
// 忽略 Null 值屬性
NullValueHandling = NullValueHandling.Ignore,
// 忽略預設值
DefaultValueHandling = DefaultValueHandling.Ignore,
// 格式化輸出 (除錯用)
Formatting = Formatting.Indented,
// 循環參考處理
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
// 列舉輸出字串而非數字
Converters = { new StringEnumConverter() }
};
string json = JsonConvert.SerializeObject(myObject, settings);
ASP.NET Core / Web API 內建整合
.NET Core 內建 `System.Text.Json`,但可輕易切換回 Json.NET:
// Startup.cs
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
LINQ to JSON 動態操作
// 建立 JSON
var jobj = new JObject
{
["id"] = 123,
["name"] = "Test",
["tags"] = new JArray("A", "B", "C"),
["meta"] = new JObject { ["created"] = DateTime.UtcNow }
};
// 查詢
string name = (string)jobj["name"];
var tags = jobj["tags"].Values();
// 修改
jobj["status"] = "active";
jobj.Remove("meta");
// 輸出
string json = jobj.ToString(Formatting.Indented);
效能優化建議
Json.NET 以靈活、強大、成熟成為 .NET JSON 處理事實標準。掌握 `JsonConvert` 核心方法、序列化設定微調、LINQ to JSON 動態操作,即能應對絕大多數 JSON 互操作場景。現代專案建議配合 ASP.NET Core 內建 DI 註冊統一設定,確保全應用序列化行為一致。