為什麼選擇 JSON?
- 輕量:無 XML 標籤開銷,體積減少 30%-50%
- 原生 JS 支持:
JSON.parse()/JSON.stringify() 零依賴
- 跨平台:語言無關文本格式,C#/Java/Python 皆有成熟庫
- 結構靈活:對象、數組、基本類型任意組合
ASP.NET 3.5 內置 JSON 支持
配置啟用
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647" />
</webServices>
</scripting>
</system.web.extensions>
服務端實現
[ScriptService]
public class PostService : WebService {
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List GetPosts(int page, int size) {
return _repo.GetPosts(page, size); // 自動序列化為 JSON
}
[WebMethod]
public void CreatePost(Post post) { // 自動反序列化 JSON → Post
_repo.Add(post);
}
}
客戶端調用 (jQuery)
$.ajax({
type: "POST",
url: "PostService.asmx/GetPosts",
data: JSON.stringify({ page: 1, size: 10 }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(resp) {
renderPosts(resp.d); // ASP.NET 3.5 包裹在 .d 屬性
}
});
JSON vs XML vs HTML 片段對比
| 維度 | JSON | XML | HTML 片段 |
| 解析性能 | ⭐⭐⭐ | ⭐⭐ | ⭐ (需 DOM 插入) |
| 數據結構 | 豐富 | 豐富 | 扁平 |
| 類型保真 | 高 | 需 Schema | 無 |
| 適用場景 | API、SPA、移動端 | 企業集成、SOAP | 局部刷新、SEO |
避坑指南
- 循環引用:實體類標記
[ScriptIgnore] 或使用 DTO 斷開循環
- 日期格式:ASP.NET 3.5 輸出
/Date(1234567890)/,客戶端需統一解析
- 大數據量:設置
maxJsonLength 避免截斷