将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加强之自定义callback示例
Sep 21 Javascript
Node.js和MongoDB实现简单日志分析系统
Apr 25 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
JQuery Mobile 弹出式登录框的实现方法
May 28 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
在JSP中如何实现MD5加密的方法
Nov 02 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 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
WINXP下apache+php4+mysql
2006/11/25 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
基于openlayers实现角度测量功能
2020/09/28 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
大学生求职信例文
2014/06/29 职场文书
大学生个人学习总结
2015/02/15 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
《花钟》教学反思
2016/02/17 职场文书
高三化学教学反思
2016/02/22 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
如何自己动手写SQL执行引擎
2021/06/02 MySQL
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
利用Apache Common将java对象池化的问题
2022/06/16 Servers
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers