将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等比例控制图片宽高的具体实现
Jan 28 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
浅谈Javascript如何实现匀速运动
Dec 19 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
loading动画特效小结
Jan 22 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
Feb 23 Javascript
简单了解常用的JavaScript 库
Jul 16 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
利用javascript查看html源文件
2006/11/08 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
Vue实现手机计算器
2020/08/17 Javascript
浅析Python基础-流程控制
2016/03/18 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
岗位职责定义及内容
2013/11/08 职场文书
采购内勤岗位职责
2013/12/10 职场文书
医院检讨书范文
2014/02/01 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
个人催款函范文
2015/06/23 职场文书
创业计划书之农家乐
2019/10/09 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android