C#JSon解析之三个库的性能对⽐
Swifter.Json、System.Text.Json、NewtonJson(各⾃的简介和使⽤⾃⾏百度或看官⽅⽂档,)解析Json的性能对⽐(.Net5):
解析⼀个拥有59个属性的对象,Count表⽰序列化或逆序列化的执⾏次数,花费时间的单位为秒(对⽐结果见图1)。结论:SwifterJson 在解析的性能上明显优于其他两个库。
Swifter.JSon(应该是国⼈开发的)的特点在于其使⽤unsafe、ref达到操作指针⽅式编写代码(见源码,源码均有中⽂注解),达到⾼性能的同时运⾏空间也相对较⼩。同时需要注意,Swifter.Json对属性是不区分⼤⼩写的,但是这个问题可以对属性进⾏标识符说明(即[RWField("属性别名")])来解决。
Swifter.Json、System.Text.Json、NewtonJson均具有良好的稳定性和安全性,鉴于Swifter.Json在性能上的优越性(包括时、空效率),Swifter.Json是C#解析Json的优先选择。
图1
代码:
Test.cs:
public static void TestJSonSerialize() {
OriginalParamer paramers = OriginalParamer.GetInitObj();
Dictionary<string, List<string>> AllResults = new Dictionary<string, List<string>>();
List<string> swifterSeResults = new List<string>();
List<string> swifterDSResults = new List<string>();
List<string> jsonSeResults = new List<string>();
List<string> jsonDSResults = new List<string>();
List<string> newtonSeResults = new List<string>();
List<string> newtonDSResults = new List<string>();
List<string> counters = new List<string>();
if (paramers != null) {
Stopwatch sw = new Stopwatch();
int count = 8;
for (int i = 4; i < count; i++) {
int nextCount = (int)Math.Pow(10, i);
counters.Add(nextCount.ToString());
string json = null;
sw.Restart();
for (int j = 0; j < nextCount; j++) {
json = JSonHelper.SwifterJSONSerializeObject(paramers);
}
sw.Stop();
swifterSeResults.Add(sw.Elapsed.TotalSeconds.ToString());
sw.Restart();
for (int j = 0; j < nextCount; j++) {
var obj = JSonHelper.SwifterJSONDeserializeObject<OriginalParamer>(json);
}
sw.Stop();
swifterDSResults.Add(sw.Elapsed.TotalSeconds.ToString());
sw.Restart();
for (int j = 0; j < nextCount; j++) {
json = JSonHelper.JSONSerializeObject(paramers);writeline特点
}
sw.Stop();
sw.Stop();
jsonSeResults.Add(sw.Elapsed.TotalSeconds.ToString());
sw.Restart();
for (int j = 0; j < nextCount; j++) {
var obj = JSonHelper.JSONDeserializeObject<OriginalParamer>(json);
}
sw.Stop();
jsonDSResults.Add(sw.Elapsed.TotalSeconds.ToString());
sw.Restart();
for (int j = 0; j < nextCount; j++) {
json = JSonHelper.NewtonJSonSerializeObject(paramers);
}
sw.Stop();
newtonSeResults.Add(sw.Elapsed.TotalSeconds.ToString());
sw.Restart();
for (int j = 0; j < nextCount; j++) {
var obj = JSonHelper.NewtonJSonDeserializeObject<OriginalParamer>(json);
}
sw.Stop();
newtonDSResults.Add(sw.Elapsed.TotalSeconds.ToString());
}
}
Console.WriteLine("Serialize(unit with second of spend time):");
Console.WriteLine(" Count SwifterJSon Text.JSon NewtonJSon");
for (int i = 0; i < counters.Count; i++) {
Console.WriteLine(" {0,-10} {1,-10} {2,-10} {3,-10}", counters[i], swifterSeResults[i], jsonSeResults[i], newtonSeResults[ }
Console.WriteLine("Deserialize(unit with second of spend time):");
Console.WriteLine(" Count SwifterJSon Text.JSon NewtonJSon");
for (int i = 0; i < counters.Count; i++) {
Console.WriteLine(" {0,-10} {1,-10} {2,-10} {3,-10}", counters[i], swifterDSResults[i], jsonDSResults[i], newtonDSResults }
}
JsonHelper.cs:
public class JSonHelper {
/// <summary>
/// using Swifter.Json序列化对象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string SwifterJSONSerializeObject(Object obj) {
var json = JsonFormatter.SerializeObject(obj);
return json;
}
/// <summary>
/// using Swifter.Json逆序列化对象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static T SwifterJSONDeserializeObject<T>(string json) {
var obj = JsonFormatter.DeserializeObject<T>(json);
return obj;
}
/
// <summary>
/// <summary>
/// using System.Text.Json 序列化对象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string JSONSerializeObject(Object obj) {
var json = System.Text.Json.JsonSerializer.Serialize(obj);
return json;
}
/// <summary>
/
// using System.Text.Json 逆序列化对象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static T JSONDeserializeObject<T>(string json) {
var obj = System.Text.Json.JsonSerializer.Deserialize<T>(json); return obj;
}
/// <summary>
/// using Newtonsoft.Json 序列化对象
/// </summary>
/// <param name="obj"></param>
/
// <returns></returns>
public static string NewtonJSonSerializeObject(Object obj) {
var json = JsonConvert.SerializeObject(obj);
return json;
}
/// <summary>
/// using Newtonsoft.Json 逆序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T NewtonJSonDeserializeObject<T>(string json) {
var dest = JsonConvert.DeserializeObject<T>(json);
return dest;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论