关于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

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

  1. C++调用JsonCpp库,json简单操作以及常用函数

    本文章记录作者对json操作的一点心得. 目录 准备 项目配置 代码 json格式说明 运用 初始化 调用时碰到的错误 准备 本文选择第三方库JsonCpp来解析json 下载地址:https://s ...

  2. 用Python做一个人脸识别系统,简单操作又实用~

    导语 今天给大家介绍一个非常简洁的人脸识别系统: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.而通过我们Python编程,几行代码就可以实现人脸识别,这主要得益于face_reco ...

  3. php如何操作mysql数据库代码_php如何操作mysql数据库的类(附代码)

    这篇文章主要介绍了php简单操作mysql数据库的类,涉及php操作mysql的连接.查询.插入.删除等基本操作方法,非常具有实用价值,需要的朋友可以参考下.<?php /** * Databa ...

  4. 碉堡!Mysql8.0竟然可以直接操作json文档了。。。

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 经过漫长的测试, ...

  5. 碉堡!Mysql8.0竟然可以直接操作json文档了

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 4.5 分钟. 作者:旺财不哭 来源:https://www.jianshu.com/p/d4b012769a3b 经过漫长的 ...

  6. moloch1.8.0简单操作手册

    moloch1.8.0简单操作手册 Sessions 页面:Sessions主要通过非常简单的查询语言来构建表达式追溯数据流量,以便分析. SPIView 页面: SPIGraph页面:SPIGrap ...

  7. spark sql的简单操作

    测试数据 sparkStu.text zhangxs 24 chenxy wangYr 21 teacher wangx 26 teacher sparksql { "name": ...

  8. MongoDB的简单操作

    MongoDB的简单操作 ( mac系统下mongDB的图形管理工具为:mongoHub ) ( windows系统下mongDB的图形管理工具为:mongoVUE ) 1.mongoDB通过终端创建 ...

  9. .NET Core 3.0 新 JSON API - JsonSerializer

    JsonSerializer  前面几节的内容可能稍微有点底层,我们大部分时候可能只需要对C#的类进行串行化或者将JSON数据反串行化成C#类,在.NET Core 3.0里面,我们可以使用JsonS ...

最新文章

  1. c语言combine函数,combine
  2. matlab 文件路径问题
  3. 第五届[2013年]全国大学生数学竞赛[数学类]试题六参考解答
  4. hibernate的映射之二(一对多双向关联)
  5. imgkit分辨率_pythonhtml2image: imgkit 和 wkhtmltoimage的坑
  6. slf4j + log4j2配置日志引擎
  7. chrome postman插件_接口测试工具之Postman(原创)
  8. C语言switch如何退出,C语言萌新,想问问如何让下面那个switch函数输出的结果继续...
  9. iPad 读不到 USB,在 Mac 上如何进行 USB 格式化?
  10. 未解决:火狐浏览器提示不安全的链接
  11. 现代地图和古代地图下载收集
  12. 深度学习Hello World --- 手写体识别 实战
  13. Github 汉化插件教程
  14. 推进交通安全文化建设,首先要建立科学的理念
  15. 华为鸿蒙亮利剑,华为P50pro亮利剑,鸿蒙OS+徕卡五摄+5400mAh,这才是华为
  16. 短线上岸西安电子科技大学考研811信号与电路分析经验分享
  17. Windows下使用windeployqt打包QML项目(双击运行无反应)
  18. Python 生成图片验证码(详解)
  19. 《Uncertainty-aware Joint Salient Object and Camouflaged Object Detection》—CVPR2021—SOD+COD
  20. EOS合约账户名称及作用

热门文章

  1. 收集53个程序员励志名言
  2. 面试中的这些坑,你踩过几个?
  3. python爬虫怎么下载图片到手机_Python爬虫获取图片并下载保存至本地
  4. ctrl z撤销后如何恢复_回收站清空后数据如何恢复?
  5. 数据库---练习题(45道)
  6. c++编写托管dll_教程:如何编写简单的网站并免费托管
  7. 本土链雷达网_走向本土设计
  8. python对象序列化或持久化的方法
  9. SINOCES 2011
  10. Kernel Newbies内核开发新手的资源