2011-06-16 70 views
30

比方說,我有一個對象myObject的,看起來像這樣:轉換列表以JSON格式 - 快速簡便的方法

public class MyObject 
{ 
    int ObjectID {get;set;} 
    string ObjectString {get;set;} 
} 

我有myObject的名單,我期待將它轉換成一個JSON字符串與一個stringbuilder。我知道如何創建一個JavascriptConverter並通過傳遞一個列表來創建一個json字符串,並讓轉換器構建字符串,但在這種特殊情況下,我正在尋找避免開銷並直接轉到列表中具有foreach循環的json字符串像這樣:

StringBuilder JsonString = new StringBuilder(); 

foreach(MyObject TheObject in ListOfMyObject) 
{ 

} 

我試圖通過追加逗號和引號使用此方法,但它還沒有解決(還)。

感謝您的建議。

回答

50

我使用JavaScript serialization class以前做過類似:

using System.Web.Script.Serialization; 

和:

JavaScriptSerializer jss = new JavaScriptSerializer(); 

string output = jss.Serialize(ListOfMyObject); 
Response.Write(output); 
Response.Flush(); 
Response.End(); 
+0

Response.ContentType =「application/json; charset = utf-8」; – 2017-12-13 14:29:14

+0

此行在寫入之前使其在Firefox和Chrome中更易讀 – 2017-12-13 14:30:02

6

我會避免使用您自己,並使用兩種:

System.Web.Script.JavascriptSerializer

JSON.net

雙方將做一個出色的工作:)

+0

注:JSON.net是有代價的。這是按開發人員收費的。 – 2015-08-19 13:35:18

+1

@ MatthewT.Baker我不認爲這是正確的。它在MIT許可證下(http://json.codeplex.com/license),所以不需要任何費用。 – 2015-08-19 23:48:46

+0

奇怪[Newtonsoft商店](http://www.newtonsoft.com/store)陳述不同。除非我很想理解授權條款嗎? – 2015-08-20 10:16:38

2

我更喜歡使用LINQ到JSON功能的JSON.NET框架。以下是如何將對象列表序列化爲json。

List<MyObject> list = new List<MyObject>(); 

Func<MyObject, JObject> objToJson = 
    o => new JObject(
      new JProperty("ObjectId", o.ObjectId), 
      new JProperty("ObjectString", o.ObjectString)); 

string result = new JObject(new JArray(list.Select(objToJson))).ToString(); 

您完全控制結果json字符串中的內容,您只需看代碼即可清楚地看到它。當然,你可以擺脫Func<T1, T2>聲明,並直接在new JArray()調用中指定此代碼,但將此代碼解壓縮到Func<>它看起來更清楚發生了什麼以及如何將對象實際轉換爲json。您甚至可以在某種設置方法(即在構造函數中)將此方法外部的Func<>存儲。

+0

我同意這種方法,因爲通常自定義對象所需的唯一信息是ID和標籤。不過,我想指出上面的代碼會產生一個錯誤。包裝JArray的JObject是不必要的,並且會拋出「無法將Newtonsoft.Json.Linq.JArray添加到Newtonsoft.Json.Linq.JObject」的錯誤。 – David 2015-07-28 18:16:56

31

3年的經驗後,我回到這個問題,並建議把它寫這樣的:

string output = new JavaScriptSerializer().Serialize(ListOfMyObject); 

一行代碼。

+1

我很高興看到這樣的答案。那一年,我們只是困惑的孩子。多年以後,以前的事情看起來如此重要,很難讓我們變得如此簡單和不重要,因爲我們的成長,然而,問題仍然存在:-) – armnotstrong 2015-02-13 04:06:17

9

對於我來說,它的工作使用Newtonsoft.Json:

using Newtonsoft.Json; 
// ... 
var output = JsonConvert.SerializeObject(ListOfMyObject); 
+0

如果您有2個ListOfMyObject,該怎麼辦?你會如何將這兩個列表轉換爲對象的json數組 – 2016-07-08 13:56:40

+3

您可以將這兩個列表放入一個列表中,然後執行上述操作:ListOfMyObject.AddRange(MyOtherListOfMyObject); – Roger 2016-07-08 18:03:08