程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Json.NET、fastJSON、ServiceStack.Text簡單序列化操作性能測試,json.netfastjson

Json.NET、fastJSON、ServiceStack.Text簡單序列化操作性能測試,json.netfastjson

編輯:C#入門知識

Json.NET、fastJSON、ServiceStack.Text簡單序列化操作性能測試,json.netfastjson


由於最近項目中需要用到JSON序列化操作,所以對JSON序列化框架做了一下對比。

Json.NET(Newtonsoft.Json)是我們平常用的最多的框架,現在成為了Visual Studio Web項目模板默認引用的庫之一;fastJSON號稱是最小最快的序列化工具;ServiceStack.Text是著名的Stack Exchange團隊的開源項目。下面我們開始測試工作:

測試環境:操作系統Windows 8.1,CPU:Intel Core i7-3610QM,Visual Studio 2013。

我們先創建一個控制台應用程序,從NuGet中添加3個庫最新版本的引用。

創建一個可序列化類型:

1 [Serializable] 
2 public class Person { 
3     public int Id { get; set; } 
4     public string Name { get; set; } 
5     public int Age { get; set; } 
6     public bool Gender { get; set; } 
7     public string Address { get; set; } 
8     public string IDCard { get; set; } 
9 }

添加一個公共方法循環執行序列化操作:

 1 /// <summary> 
 2 /// 循環執行序列化操作 
 3 /// </summary> 
 4 /// <typeparam name="T"></typeparam> 
 5 /// <param name="entity">需要執行序列化操作的實體</param> 
 6 /// <param name="testName">庫的名稱</param> 
 7 /// <param name="count">循環測試</param> 
 8 /// <param name="func">序列化方法的委托</param> 
 9 private static void PerformanceTest<T>(T entity, string testName, int count, Action<T> func) where T : class { 
10     var stopwatch = new Stopwatch(); 
11     stopwatch.Start(); 
12     for (var i = 0; i < count; i++) { 
13         func.Invoke(entity); 
14     } 
15     stopwatch.Stop(); 
16     Console.WriteLine("{0}: {1}", testName, stopwatch.ElapsedMilliseconds); 
17 }

接下來就可以在Main方法裡面調用了:

 1 static void Main() { 
 2     var person = new Person { 
 3         Id = 1, 
 4         Name = "Vision Ding", 
 5         Age = 28, 
 6         Gender = true, 
 7         Address = "廣東省廣州市天河區", 
 8         IDCard = "42XXXX198XXXXXXXXX" 
 9     }; 
10     for (var i = 0; i < 10; i++) { 
11         Console.WriteLine("第{0}次執行:", i + 1); 
12         PerformanceTest(person, "Json.NET", 100000, p => JsonConvert.SerializeObject(p)); 
13         PerformanceTest(person, "fastJSON", 100000, p => JSON.ToJSON(p)); 
14         PerformanceTest(person, "ServiceStack", 100000, p => p.ToJson()); 
15     } 
16 }

我們循環執行了10次,得到的結果如下(單位毫秒):

  Json.NET fastJSON ServiceStack.Text 1 480 342 406 2 218 308 251 3 216 307 235 4 219 326 235 5 220 310 251 6 215 308 232 7 217 309 233 8 216 305 233 9 216 306 233 10 218 306 269

從上面的執行結果可以開出,在第一次執行的時候fastJSON最快,Json.NET最慢,但是後面的9次剛好相反。由於每次循環都是執行10W次序列化操作,相差不過幾十毫秒,所以這點性能差距幾乎可以忽略不計,選擇Json.NET還是很可靠的。

上面3個類庫的官方網站:


JSONNET 將對象 序列化為 JSON字符串時,可以否指定,某個屬性不被轉化

通常在需要序列化屬性下標記即可:
[JsonProperty(Name = "password")]
public string Password{ get; set; }

你試試 不標記的情況下能否實現~
 

fastjson怎讀寫json文件

publicstaticfinal<TTparseObject(Stringtext,Class<Tclazz);//把 JSON 文本 parse 為 JavaBean
publicstaticfinalJSONArrayparseArray(Stringtext);//把 JSON 文本 parse 成 JSONArray
publicstaticfinal<TList<TparseArray(Stringtext,Class<Tclazz);//把 JSON 文本 parse 成 JavaBean 集合
publicstaticfinalStringtoJSONString(Objectobject);//將 JavaBean 序列化為 JSON 文本
publicstaticfinalStringtoJSONString(Objectobject,booleanprettyFormat);//將 JavaBean 序列化為帶格式的 JSON 文本
publicstaticfinalObjecttoJSON(ObjectjavaObject);將 JavaBean 轉換為 JSONObject 或者 JSONArray 。
在網上搜的api,你可以動手試試,總在fastJSON很好很強大!
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved