将List对象列表转换成JSON格式的类实现方法


Posted in Javascript onJuly 04, 2016

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。引用于[http://www.json.org/json-zh.html]

一般应用中,我习惯性地把结果集以更通用的IList<object>对象列表方式保存(可能会对性能有些影响)来保证类间交互时的通用性,降低函数功能对具体类的耦合。但AJAX调用时,还需要把对象列表转换成JSON数据交给前端显示。有麻烦。

研究了一下JSON的对象定义和集合定义

将List对象列表转换成JSON格式的类实现方法

将List对象列表转换成JSON格式的类实现方法

 感觉利用反射来生成JSON还比较方便。代码如下:

Code
//
// ObjectListToJSON
// Copyright (c) 2008 pcode. All rights reserved.
//
// Author(s):
//
//   pcode,jy@cjlu.edu.cn
// 此类用于将List<object>转换为json数据格式
// 目前仅能处理一个object的基础数据类型而且对[ { }] \等对json有伤害影响特殊符号没有特殊处理
// 希望有兄弟继续完善

using System.Reflection;
using System.Collections.Generic;

public class ObjectListToJSON
{
  #region 反射一个对象所有属性和属性值和将一个对象的反射结果封装成jsons格式
  /**
     * 对象的全部属性和属性值。用于填写json的{}内数据
     * 生成后的格式类似
     * "属性1":"属性值"
     * 将这些属性名和属性值写入字符串列表返回
     * */
  private List<string> GetObjectProperty(object o)
  {
    List<string> propertyslist = new List<string>();
    PropertyInfo[] propertys = o.GetType().GetProperties();
    foreach (PropertyInfo p in propertys)
    {
      propertyslist.Add("\"" + p.Name.ToString() + "\":\"" + p.GetValue(o, null) + "\"");
    }
    return propertyslist;
  }
  /**
   * 将一个对象的所有属性和属性值按json的格式要求输入为一个封装后的结果。
   *
   * 返回值类似{"属性1":"属性1值","属性2":"属性2值","属性3":"属性3值"}
   * 
   * */
  private string OneObjectToJSON(object o)
  {
    string result = "{";
    List<string> ls_propertys = new List<string>();
    ls_propertys = GetObjectProperty(o);
    foreach (string str_property in ls_propertys)
    {
      if (result.Equals("{"))
      {
        result = result + str_property;
      }
      else
      {
        result = result + "," + str_property + "";
      }
    }
    return result + "}";
  }
  #endregion
  /**
     * 把对象列表转换成json串
     * */
  public string toJSON(List<object> objlist)
  {//覆写,给懒人一个不写classname的机会
    return toJSON(objlist, string.Empty);
  }
  public string toJSON(List<object> objlist, string classname)
  {
    string result = "{";
    if (classname.Equals(string.Empty))//如果没有给定类的名称,那么自做聪明地安一个
    {
      object o = objlist[0]
      classname = o.GetType().ToString();
    }
    result += "\"" + classname + "\":[";
    bool firstline = true;//处理第一行前面不加","号
    foreach (object oo in objlist)
    {
      if (!firstline)
      {
        result = result + "," + OneObjectToJSON(oo);
      }
      else
      {
        result = result + OneObjectToJSON(oo) + "";
        firstline = false;
      }
    }
    return result + "]}";
  }

}

OK,我们建立一个测试来验证一下它是否生效。

先建立一个对象定义person.cs

namespace Model
{
  public class Person
  {
    public string ID { get; set; }
    public string Name { get; set; }
    public string Sex { get; set; }
  }
}

然后建立测试类

我用了一种非常原始的方法生成了对象列表,其实可以从数据库查询,怕把事情搞得太复杂。呵呵。

using NUnit.Framework;
using System.Collections.Generic;
namespace JSon
{
  [TestFixture]
  public class TestObjectToJSON
  {
    [Test]
    public void dotest() {
      Model.Person p1 = new Model.Person();
      p1.ID = "1";
      p1.Name = "p1";
      p1.Sex = "s1";
      Model.Person p2 = new Model.Person();
      p2.ID = "2";
      p2.Name = "p2";
      p2.Sex = "s2";

      Model.Person p3 = new Model.Person();
      p3.ID = "3";
      p3.Name = "p3";
      p3.Sex = "s3";
      List<object> lp = new List<object>();
      lp.Add(p1);
      lp.Add(p2);
      lp.Add(p3);

      ObjectListToJSON t = new ObjectListToJSON();
      string json = t.toJSON(lp, "persons");
      System.Console.Write(json);
    }
  }
}

跑一下Nuint,我们想要的json串已经生成了。

将List对象列表转换成JSON格式的类实现方法

以上这篇将List对象列表转换成JSON格式的类实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
Feb 02 Javascript
如何设置一定时间内只能发送一次请求
Feb 28 Javascript
详解js闭包
Sep 02 Javascript
jQuery.Form上传文件操作
Feb 05 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
20行js代码实现的贪吃蛇小游戏
Jun 20 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
JS实现简易留言板(节点操作)
Mar 16 Javascript
详解关于Vue单元测试的几个坑
Apr 26 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 #Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 #Javascript
jQuery通用的全局遍历方法$.each()用法实例
Jul 04 #Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 #Javascript
js中使用使用原型(prototype)定义方法的好处详解
Jul 04 #Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 #Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 #Javascript
You might like
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python程序需要编译吗
2020/06/19 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
python 实现的车牌识别项目
2021/01/25 Python
解释一下抽象方法和抽象类
2016/08/27 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
化学教育专业求职信
2014/07/08 职场文书
五四青年节的活动方案
2014/08/20 职场文书
员工自我工作评价
2015/03/06 职场文书
2015年药店工作总结
2015/04/20 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers