将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对象和属性的创建方法
Jan 15 Javascript
用ADODB.Stream转换
Jan 22 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
Bootstrap 手风琴菜单的实现代码
Jan 20 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
原生JS实现的雪花飘落动画效果
May 03 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
Jul 07 Javascript
vuex state中的数组变化监听实例
Nov 06 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
php中json_encode中文编码问题分析
2011/09/13 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
javascript date格式化示例
2013/09/25 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python制作刷网页流量工具
2017/04/23 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
入党现实表现材料
2014/12/23 职场文书
自我检讨书范文
2015/01/28 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python