将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库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
js实现图片轮播效果
Dec 19 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
Angular.Js中ng-include指令的使用与实现
May 07 Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 Javascript
详解vue-cli 接口代理配置
Dec 13 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
Oct 09 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
JavaScript手写数组的常用函数总结
Nov 22 Javascript
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php 生成WML页面方法详解
2009/08/09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
JavaScript Prototype对象
2009/01/07 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python实现打砖块游戏
2020/02/25 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python 实现简单的客户端认证
2020/07/29 Python
办公室主任职责范文
2013/11/08 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
导游词之潮音寺
2019/09/26 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript