Dot-Net
在 WCF 中 JSON 序列化 .NET DataTable 的最佳方法是什麼?
當我將 WCF 配置為使用 JSON 序列化並在我的一個 DataContracts 中包含一個 DataTable 時,它會先將 DataTable 序列化為 XML,然後再將整個 DataContract 序列化為 JSON。我希望將 DataTable 序列化為 JSON,而不是 XML。
我的問題是:
- 為什麼先將DataTable序列化為XML?
- 我怎樣才能讓它序列化為 JSON?
- DataTable 是一個純 .NET 結構,它不能(很容易)用 JSON 以無損方式表示。DataTables 包含許多 JSON 無法儲存的附加資訊:主鍵、autoincs、允許空值、標題、數據類型、索引等。序列化為 XML/Binary 是 DataTable 可以由 .NET 本機序列化的唯一方式。然後將此 XML 序列化 DataTable 序列化為 JSON。
- 使用JSON.NET或FastJSON將 DataTable 轉換為普通、乾淨的與 JSON 兼容的 DataTable 版本,任何 JSON 客戶端都可以使用該版本,而不僅僅是 .NET WCF 客戶端。您將失去上面 (1) 中提到的所有 DataTable 自定義屬性,並且只會獲取欄位名稱/值 JSON 對。由於每行中的欄位名稱重複,這種方式的儲存效率很低。
不要在 DataContract 中使用 DataTable。如果您想要 DataTable 的好處並且您的客戶端始終是 .NET,請通過 Binary Serialization 將 DataTable 序列化為字節數組,然後可選地壓縮生成的序列化字節流。在 DataContract 中公開一個字節數組。這將在客戶端(在解壓縮和二進制反序列化之後)為您提供高效、完全無損的 DataTable 版本,而不是 DataTable 的淡化 JSON 版本(如 (2) 提供的)……