添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱运动的围巾  ·  Python ...·  1 周前    · 
俊秀的遥控器  ·  Trax Retail Announces ...·  5 月前    · 
欢快的南瓜  ·  antd ...·  7 月前    · 
爱逃课的凉茶  ·  Langston and Sabrina ...·  8 月前    · 

Swifter.Json、System.Text.Json、NewtonJson(各自的简介和使用自行百度或看官方文档,)解析Json的性能对比(.Net5):

解析一个拥有59个属性的对象,Count表示序列化或逆序列化的执行次数,花费时间的单位为秒(对比结果见图1)。结论:SwifterJson在解析的性能上明显优于其他两个库。

Swifter.JSon(应该是国人开发的)的特点在于其使用unsafe、ref达到操作指针方式编写代码(见源码 Swifter.Json/JsonSerializer.cs at master · Dogwei/Swifter.Json · GitHub ,源码均有中文注解),达到高性能的同时运行空间也相对较小。同时需要注意,Swifter.Json对属性是不区分大小写的,但是这个问题可以对属性进行标识符说明(即[RWField("属性别名")])来解决。

Swifter.Json、System.Text.Json、NewtonJson均具有良好的稳定性和安全性,鉴于Swifter.Json在性能上的优越性(包括时、空效率),Swifter.Json是C#解析Json的优先选择。

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);
                    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[i]);
            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[i]);
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>
    /// 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;
                    SwifterJSon、System.Text.Json、NewtonJson解析Json的性能对比:解析对象为一个拥有59个属性的对象,cout表示序列化或逆序列化的执行次数,花费时间的单位为秒。结论:SwifterJson在解析的速度上明显优于其他两个库。代码:Test.cs:public static void TestJSonSerialize() {            OriginalParamer paramers = OriginalParamer.GetInitO.
				
全网最简单的C# json数据解析无敌菜鸟教程十分钟搞定json数据解析废话先说一点,算了。直接进入正题吧。 用例子说话:JSON数据:string json: "Result": "A01", "List": [ "name": "王艳", "sex": "F", "idno":
Winform C# 从省市区的json文件中读取的三级联动下拉选项实现。 之前上传了一个解板xml文件的版本,今天做了一个解析json 的版本,由于对 Newtonsoft 不是太熟,只用了一点点的功能,主要是JObject 和JArray 的使用。 因为时间有限,有什么可以优化的,请大家留言。 代码非常简单,只有省市区 三级联动的功能!
该案例我是用WinForm做的,相信大部分人都是在Web开发中用,这个没关系。首先你需要给你的Project引入所需的dll。System.Web和System.Web.Extensions如图好的,下面是我用程序创建的一个JSON格式的名为”json.txt”的文本。下面是我的WinForm的UI和识别代码逻辑效果如何你解析JSON不是多个对象,而是一个,如: 那么执行效果如图:好的,作为辅助,我创建了一个classPerson,代码如下:然后就是主逻辑代码:如下,上面用到了很多方法,都是很重要很重要很重要的,重要是事情要说三遍!!!由于使用的WinForm开发的,所以上面的代码中会含有部
该资源参考博客:http://blog.csdn.net/eastmount/article/details/26872793主要介绍豆瓣API开发过程中如何通过OAuth2.0认证授权访问用户自己信息的.豆瓣API的资源较少,有的基本是php和java的,所以想通过该资源讲述C#认证的过程.主要分为三个步骤:获取autorization_code、获取access_token和使用access_token.详解参考博客,其中需要引用Newtonsoft.Json.dll解析JSON格式数据. 采用VS2012 .NET4.5开发,以下版本可能不能运行.同时需要填写自己的API Key,Sercet和回调地址.程序里的被我改过,一定填写自己的才能运行,如果不懂的建议参考博客完成. 该资源为免费资源供对豆瓣API感兴趣或正在开发而不知所措人解忧.
.Net平台上功能强大,易于使用且速度最快的json序列化器和反序列化器。 如果要使用Swifter.Json,请在上下载或安装最新版本。 如果您想使用Swifter.Json,请在上下载或安装最新版本。 易于使用简单使用 public class Demo public int Id { get ; set ; } public int Name { get ; set ; } public static void Main () var json = JsonFormatter . SerializeObject ( 主要是运用到这两个方法,储存到的一个JObject类型里 JsonConvert.DeserializeObject()//序列化string成Json结构 JsonConvert.SerializeObject()//将Json反序列化为string var jsonstr = "{'姓名':
JSON帮助类,序列化、反序列化扩展类。包含:对象序列化成JSON字符串、JSON字符串序列化成对象、JSON字符串序列化成集合、JSON字符串序列化成DataTable等等。 用途:用于数据对象,通信传输,json已经取代了xml、键值对,成为主流数据传输格式。
using NewTonsoftJson.Linq;`` 处理Json对象 JObject obj = JObject.Parse("{\"h\":\"Hello world!!!\",\"age\":123}"); foreach (var item in obj)
//本程序用于全量解析stdf转换为csv格式 //适用于64位windows操作系统 (如果需要linux版本可以通过邮箱联系我) //version 0.0.9(20180913) //性能:17M/s~33M/s (解析100M以上的二进制文件 ),(看你运行的电脑的cpu性能了) //支持25种类型解析 第一步打开配置文件stdparser.json 第二步填写待解析的stdf文件绝对路径 第三步保存退出配置文件 第四步双击运行stdfparser.exe 第五步在ret文件夹内查看解析结果文件 注,文件内自带了一个stdf文件,你可以在未修改配置文件中的待解析文件路径时直接双击运行进行测试 //如有反馈欢迎通过下列联系方式联系我 //Email:[email protected] 如果您要生成test_limits/wafer_map/raw_data/测试异常结束列表,可直接使用在线工具:http://stdf.colorcore.cn生成。
主要用于解析 QQ 导出的消息,现在能支持解析MHT格式的导出文件. 可导出为 JSON 和 SQLite 格式的数据文件 需要注意的是,QQ导出的MHT没有谁发言这样的信息,所以导出的数据中只有 IsBySelf 用于判断是否是自己发言. 导出JSON的格式 Target: Messages: IsBySelf:bool , Date: Date , Content:String 导出为SQLite 表名为 MessageDB,有IsBySelf, Content, Date这三个值 使用的默认 Formater Formater 是用于格式化消息,因为MHT的消息导出中 有HTML标签,所以需要 Formater 用于规整消息格式. 默认的Formater 会去除字体样式,将Image的引用转
在 Unity3D 中,可以通过 JsonUtility 类或第三方的 Json.NET 解析 JSON 数据。 1. 使用 JsonUtility 类解析 JSON 数据 JsonUtility 类是 Unity 内置的用于 JSON 序列化和反序列化的类,使用起来非常简单。以下是一个使用 JsonUtility 解析 JSON 数据的示例: ```csharp [System.Serializable] public class UserData public int id; public string name; public int age; // 可以定义其他需要的字段 public void ParseJsonData(string jsonData) UserData userData = JsonUtility.FromJson<UserData>(jsonData); Debug.Log("id: " + userData.id); Debug.Log("name: " + userData.name); Debug.Log("age: " + userData.age); 在上面的代码中,我们先定义了一个 UserData 类,用于保存从 JSON 数据中解析出来的字段。然后使用 JsonUtility 的 `FromJson` 方法将 JSON 数据转换为 UserData 对象,并输出解析出来的字段。 需要注意的是,JsonUtility 只支持简单的 JSON 数据类型,如基本类型、数组和嵌套对象。如果需要解析复杂的 JSON 数据,需要使用第三方的 Json.NET 。 2. 使用 Json.NET 解析 JSON 数据 Json.NET 是一个流行的 .NET 平台上的 JSON 序列化和反序列化,支持各种复杂的 JSON 数据类型,使用起来非常方便。以下是一个使用 Json.NET 解析 JSON 数据的示例: ```csharp using Newtonsoft.Json; public void ParseJsonData(string jsonData) UserData userData = JsonConvert.DeserializeObject<UserData>(jsonData); Debug.Log("id: " + userData.id); Debug.Log("name: " + userData.name); Debug.Log("age: " + userData.age); 在上面的代码中,我们使用了 Json.NET 的 `DeserializeObject` 方法将 JSON 数据转换为 UserData 对象,然后输出解析出来的字段。 需要注意的是,在使用 Json.NET 解析 JSON 数据时,需要先安装 Newtonsoft.Json 包。可以在 Unity 的 Package Manager 中搜索 "Json.NET" 并安装即可。同时,需要在代码文件中添加 `using Newtonsoft.Json;` 头文件,以便让编译器知道我们要使用的是 Json.NET 命名空间中的类。