将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 相关文章推荐
javascript document.referrer 用法
Apr 30 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
JS简单去除数组中重复项的方法
Sep 13 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
jquery validation验证表单插件
Jan 07 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
swiper4实现移动端导航切换
Oct 16 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
漂亮但不安全的CTB
2006/10/09 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
js DOM的学习笔记
2011/12/22 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
原生JS轮播图插件
2017/02/09 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python流程控制 if else实现解析
2019/09/02 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
护理专业推荐信
2013/11/07 职场文书
培训心得体会
2013/12/29 职场文书
运动会广播稿100字
2014/09/14 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
刑事附带民事代理词
2015/05/25 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电