将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必备 api中英文对照的chm手册 下载
May 03 Javascript
JavaScript 的方法重载效果
Aug 07 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
Vue加载组件、动态加载组件的几种方式
Aug 31 Javascript
angularJs中ng-model-options设置数据同步的方法
Sep 30 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
vue实现购物车列表
Jun 30 Javascript
vue prop传值类型检验方式
Jul 30 Javascript
js 实现Material UI点击涟漪效果示例
Sep 23 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
模仿OSO的论坛(五)
2006/10/09 PHP
php中Smarty模板初体验
2011/08/08 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python实现数据图表
2017/07/29 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
python读取各种文件数据方法解析
2018/12/29 Python
python字典改变value值方法总结
2019/06/21 Python
python简单实现插入排序实例代码
2020/12/16 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
职称自我鉴定
2013/10/15 职场文书
前台接待的工作职责
2013/11/21 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
农村党支部承诺书
2015/04/30 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
Python装饰器的练习题
2021/11/23 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js