将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 扩展对input的一些操作方法
Oct 30 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
Jun 21 Javascript
JS中判断null、undefined与NaN的方法
Mar 26 Javascript
jQuery获取选中内容及设置元素属性的方法
Jul 09 Javascript
JavaScript实现动态创建CSS样式规则方案
Sep 06 Javascript
js改变Iframe中Src的方法
May 05 Javascript
js获取url传值的方法
Dec 18 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
vue 弹框产生的滚动穿透问题的解决
Sep 21 Javascript
vue项目初始化到登录login页面的示例
Oct 31 Javascript
JavaScript cookie原理及使用实例
May 08 Javascript
webpack的移动端适配方案小结
Jul 25 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
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
js实现图片360度旋转
2017/01/22 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
外语专业毕业生个人的自荐信
2013/11/19 职场文书
工地门卫岗位职责
2013/12/30 职场文书
小学生安全责任书
2014/07/25 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
电力工程合作意向书
2015/05/11 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
学校运动会简讯
2015/07/20 职场文书
小学班级管理心得体会
2016/01/07 职场文书
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL