将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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
Javascript 判断 object 的特定类转载
Feb 01 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
Sep 15 Javascript
javascript jq 弹出层实例
Aug 25 Javascript
Css3制作变形与动画效果
Jul 24 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
关于Ajax的原理以及代码封装详解
Sep 08 Javascript
vue .sync修饰符的使用详解
Jun 15 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
Aug 22 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php基础知识:控制结构
2006/12/13 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
Prototype Date对象 学习
2009/07/12 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
vue实现计算器功能
2020/02/22 Javascript
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python中执行shell的两种方法总结
2017/01/10 Python
python 文件转成16进制数组的实例
2018/07/09 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
python模拟实现斗地主发牌
2020/01/07 Python
selenium如何定位span元素的实现
2021/01/13 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
护士个人简历自荐信
2013/10/18 职场文书
应届医学毕业生求职信分享
2013/12/02 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫