c#3.0关于JSON简单操作的实用帮助类(泛型实现)

关于json的操作,网上一搜一大把。避免重复造轮子,整理发布一个笔者在项目开发中经常用到的一个json实用帮助类,泛型实现,非常方便。不废话了,贴代码:
1、json操作的帮助类:

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;

namespace DotNet.Common.Util
{
    
/// <summary>
    
/// Json操作帮助类
    
/// </summary>
    public static class JsonHelper
    {
        
#region DataContractJsonSerializer

        
/// <summary>
        
/// 对象转换成json
        
/// </summary>
        
/// <typeparam name="T"></typeparam>
        
/// <param name="jsonObject">需要格式化的对象</param>
        
/// <returns>Json字符串</returns>
        public static string DataContractJsonSerialize<T>(T jsonObject)
        {
            DataContractJsonSerializer serializer 
= new DataContractJsonSerializer(typeof(T));
            
string json = null;
            
using (MemoryStream ms = new MemoryStream()) //定义一个stream用来存发序列化之后的内容
            {
                serializer.WriteObject(ms, jsonObject);
                json 
= Encoding.UTF8.GetString(ms.GetBuffer()); //将stream读取成一个字符串形式的数据,并且返回
                ms.Close();
            }
            
return json;
        }

        
/// <summary>
        
/// json字符串转换成对象
        
/// </summary>
        
/// <typeparam name="T"></typeparam>
        
/// <param name="json">要转换成对象的json字符串</param>
        
/// <returns></returns>
        public static T DataContractJsonDeserialize<T>(string json)
        {
            DataContractJsonSerializer serializer 
= new DataContractJsonSerializer(typeof(T));
            T obj 
= default(T);
            
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                obj 
= (T)serializer.ReadObject(ms);
                ms.Close();
            }
            
return obj;
        }

        
#endregion

        
#region JavaScriptSerializer  ms这里的两个方法已经out了

        
//“System.Web.Script.Serialization.JavaScriptSerializer.JavaScriptSerializer()”已过时: 
        
//“The recommended alternative is System.Runtime.Serialization.DataContractJsonSerializer.”


        
/// <summary>
        
/// 对象转换成json
        
/// </summary>
        
/// <typeparam name="T"></typeparam>
        
/// <param name="jsonObject"></param>
        
/// <returns></returns>
        public static string JavaScriptSerialize<T>(T jsonObject)
        {
            JavaScriptSerializer serializer 
= new JavaScriptSerializer();
            StringBuilder sb 
= new StringBuilder();
            serializer.Serialize(jsonObject, sb);
            
return sb.ToString();
        }

        
/// <summary>
        
/// json字符串转换成对象
        
/// </summary>
        
/// <typeparam name="T"></typeparam>
        
/// <param name="json"></param>
        
/// <returns></returns>
        public static T JavaScriptDeserialize<T>(string json)
        {
            var result 
= new JavaScriptSerializer().Deserialize<T>(json);
            
return (T)result;
        }

        
#endregion
    }
}

ps:需要添加System.ServiceModel.Web和System.Runtime.Serialization两个引用。
ps1:对时间、DataTable等特殊类型没有单独列出处理。
2、在页面中的调用方式如下:

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace WebTest
{
    
using DotNet.Common.WebForm;
    
using DotNet.Common.Model;
    
using EntCor.Hrm.Model;
    
using DotNet.Common.Util;

    
public partial class JsonTest : BasePage
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!IsPostBack)
            {
                Company company 
= new Company { ID = 123456789, CompanyName = "test" };
                List
<Employee> listEmployees = new List<Employee>();
                Employee employee 
= new Employee { ID = 1, UserName = "jeff wong", Password = "123456", Address = "北京", Birthday = DateTime.Now.AddYears(-25), IsLeave = false, RealName = "测试用户", State = "2" };
                listEmployees.Add(employee);
                employee 
= new Employee { ID = 2, UserName = "jeffery zhao", Password = "654321", Address = "上海", Birthday = DateTime.Now.AddYears(-25), IsLeave = false, RealName = "测试用户2", State = "2" };
                listEmployees.Add(employee);
                company.Employees 
= listEmployees;
                
//对象序列化为json
                string jsonStr = DotNet.Common.Util.JsonHelper.DataContractJsonSerialize<Company>(company);//等价于过时的 string jsonStr = DotNet.Common.Util.JsonHelper.JavaScriptSerialize<Company>(company);
                this.ltrContext.Text = jsonStr;

                
//json字符串反序列化为对象
                Company jsonCompany = DotNet.Common.Util.JsonHelper.DataContractJsonDeserialize<Company>(jsonStr);
                Company jsonJsCompany 
= DotNet.Common.Util.JsonHelper.JavaScriptDeserialize<Company>(jsonStr); //过时了
                Response.Write("公司id:"+jsonCompany.ID);
                Response.Write(
"<br/><br/>公司id:" + jsonJsCompany.ID);
            }
        }
    }
}

ps:Company和Employee分别对应公司类和员工类。 
关于json的其他学习资源,推荐JSON In Code 和JSON
demo下载地址:demo

转载于:https://www.cnblogs.com/jeffwongishandsome/archive/2009/10/14/1543917.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁还没个黑历史了。。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

C# 虚方法与抽象方法区别

虚方法是必须要实现的&#xff0c;只有接口或者抽象方法才没有实现体&#xff0c;什么是实现体&#xff0c;就是方法的那对大括号&#xff1a;下面举例&#xff1a;public abstract void Fn1();//定义一个抽象方法 public vitrual void Fn2(){ };//定义一个虚方法(那对大括号必…

京东面试官:呦,你对中间件 Mycat了解的还挺深~

1.数据切分概念 数据的切分[&#xff08;Sharding&#xff09;]根据其切分规则的类型&#xff0c;可以分为两种切分模式。一种是按照不同的表&#xff08;或者Schema&#xff09;来切分到不同的数据库&#xff08;主机&#xff09;)之上&#xff0c;这种切可以称之为数据的垂直…

Redis与Memcached的区别

2019独角兽企业重金招聘Python工程师标准>>> 传统MySQL Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的&#xff0c;通过Memcached将热点数据加载到cache&#xff0c;加速访问&#xff0c;很多公司都曾经使用过这样的架构&#xff0c;但随着业务数据量…

“高仿版拼多多”宣告破产!曾一年收割1.3亿用户,如今自救失败负债16亿

全世界只有3.14 % 的人关注了青少年数学之旅又一家改变世界的互联网公司跑路了啊&#xff1f;挣扎数月的淘集集最终也回天乏术了。淘集集并购重组最终失败&#xff0c;供应商何时能拿到被拖欠的货款仍然遥遥无期。这家主打比“拼多多”更下沉市场的社交电商&#xff0c;平台上线…

处在哪个阶段?

在职业生涯中&#xff0c;可以划分出多个阶段&#xff0c;但是如下3个阶段也许是最粗糙和实在的&#xff1a; 1、入门级&#xff0c;在别人的领导下可以完成工作。 2、成熟级&#xff0c;可以独立完成工作。 3、精英级&#xff0c;可以领到别人完成工作。 你处在哪个阶段&#…

在VS Code中直接调试Web程序,是怎样一种体验?

前言要在VS Code中启动Chrome或Microsoft Edge中调试任何Web程序&#xff0c;您只需按F5或选择菜单"运行"->"启动调试"来启动会话。你可以选择在Chrome、Edge或Node.js中进行调试。Edge DevTools如果选择了Edge进行调试&#xff0c;你会发现调试工具条上…

面试官问:你做过什么Java线程池实践,我写了一篇博客给他看~

线程池大家都## 标题很熟悉&#xff0c;无论是平时的业务开发还是框架中间件都会用到&#xff0c;大部分都是基于JDK线程池ThreadPoolExecutor做的封装&#xff0c; 都会牵涉到这几个核心参数的设置&#xff1a;核心线程数&#xff0c;等待(任务)队列&#xff0c;最大线程数&am…

【Blog.Idp开源】支持在线密码找回

&#xff08;一个做认证平台&#xff0c;必须会遇到的一个问题&#xff09;BCVP框架&#xff0c;是基于:ASP.NETCore5.0VUE.jsIdentityServer4等核心技术&#xff0c;实现的前后端分离与动态认证鉴权一体化平台。01密码找回认证中心绕不开的话题Architecture Design.无论你是自…

我的狗丢了,所以我能加你微信吗? | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

将VC++6.0的代码迁移到VS2005常见问题总结(Window核心编程第五版以前代码在VS2005无法编译的解决方案)...

额喜新厌旧是男人的通病吧&#xff0c;可是呢VS2005的界面看着的确比VC6.0看着舒服&#xff0c;而且也算用习惯了吧。可是网上现在大部分C/C的代码还是用VC6.0的。这为我们这些菜鸟的学习之路增添了不少障碍&#xff0c;可能有很多朋友在这一步就放弃了吧或者抹黑走下去&#x…

被问到了!为什么一定要使用分布式,内行啊

一、为什么要使用分布式 如果需求要测试 4000 虚拟用户数&#xff0c;而本机只能支持1000 虚拟用户&#xff0c;如果测试结果有可能是电脑的问题&#xff0c;而不是服务器的问题&#xff0c;所以需要把其他虚拟用户分配到多台电脑上 把虚拟用户数分配到其他电脑上面去执行&am…

设计模式之享元

享元模式介绍享元模式主要在于共享通用对象&#xff0c;减少内存的使用&#xff0c;提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源&#xff0c;因此统一抽离作为共享对象使用。在使用此模式过程中&#xff0c;需要使用享元工厂…

真正拉开人与人之间的差距是什么?

全世界只有3.14 % 的人关注了青少年数学之旅身边总有些人看上去很轻松&#xff0c;不仅在工作中游刃有余&#xff0c;还知识渊博&#xff0c;对各种事情有自己的思考。这样的人一定是天生的学霸吧。其实学习不一定要在教室里从一本书的第一页开始看&#xff0c;学习可以很轻松。…

[导入]【翻译】WF从入门到精通(第八章):调用外部方法及工作流

摘要: 学习完本章&#xff0c;你将掌握&#xff1a; 1.创建并调用你的工作流外部的本地数据服务 2.理解怎样使用接口来为宿主进程和你的工作流之间进行通信。 3.使用设计的外部方法在你的工作流和宿主应用程序之间传输数据。 4.在一个正执行的工作流中调用其它工作流 阅读全文…

(译)Windsor入门教程---第三部分 编写第一个Installer

原文&#xff1a;http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx 简介 在第二部分我们创建了控制器工厂。现在我们要把我们的控制器交给Windsor来管理。 Installer Windsor有一个专门的类installer.cs&#xff0c;用来向容…

在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch

在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch原文来自&#xff1a;https://andrewlock.net/writing-logs-to-elasticsearch-with-fluentd-using-serilog-in-asp-net-core/对于在 Kubernetes 中运行的应用程序&#xff0c;将日志消息存储在一个中心位…

2021年度最全面JVM虚拟机,类加载过程与类加载器

前言 类装载器子系统是JVM中非常重要的部分&#xff0c;是学习JVM绕不开的一关。 一般来说&#xff0c;Java 类的虚拟机使用 Java 方式如下&#xff1a; Java 源程序&#xff08;.java 文件&#xff09;在经过 Java 编译器编译之后就被转换成 Java 字节代码&#xff08;.class …

做生意最重要的诚信呢??? | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

面试避坑手册之 Java字节流和字符流总结IO流!

从接收输入值说起 在日常的开发应用中&#xff0c;有时候需要直接接收外部设备如键盘等的输入值&#xff0c;而对于这种数据的接收方式&#xff0c;我们一般有三种方法&#xff1a;字节流读取&#xff0c;字符流读取&#xff0c;Scanner 工具类读取。 字节流读取 直接看一个…