将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 相关文章推荐
关于IE7 IE8弹出窗口顶上
Dec 22 Javascript
20款超赞的jQuery插件 Web开发人员必备
Feb 26 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
javascript实现简单的Map示例介绍
Dec 23 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
如何用JS实现网页瀑布流布局
Apr 24 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
浅谈js闭包理解
2019/03/28 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
结婚喜宴主持词
2014/03/14 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
党小组推荐意见
2015/06/02 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电