zoukankan      html  css  js  c++  java
  • [转]将List对象列表转换成JSON格式的类

    将List对象列表转换成JSON格式的类
    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的对象定义和集合定义


     附件: 您所在的用户组无法下载或查看附件



        感觉利用反射来生成JSON还比较方便。代码如下:


    Code

    [copy to clipboard]

    1 //
    2 // ObjectListToJSON
    3 // Copyright (c) 2008 pcode. All rights reserved.
    4 //
    5 //  Author(s):
    6 //
    7 //      pcode,[email]jy@cjlu.edu.cn[/email]
    8 //  此类用于将List<object>转换为json数据格式
    9 //  目前仅能处理一个object的基础数据类型而且对[ { }] \等对json有伤害影响特殊符号没有特殊处理
    10 //  希望有兄弟继续完善
    11 
    12 using System.Reflection;
    13 using System.Collections.Generic;
    14 
    15 public class ObjectListToJSON
    16 {
    17    #region 反射一个对象所有属性和属性值和将一个对象的反射结果封装成jsons格式
    18    /**
    19          * 对象的全部属性和属性值。用于填写json的{}内数据
    20          * 生成后的格式类似
    21          * "属性1":"属性值"
    22          * 将这些属性名和属性值写入字符串列表返回
    23          * 
    */
    24    private List<string> GetObjectProperty(object o)
    25    {
    26        List<string> propertyslist = new List<string>();
    27        PropertyInfo[] propertys = o.GetType().GetProperties();
    28        foreach (PropertyInfo p in propertys)
    29        {
    30            propertyslist.Add("\"" + p.Name.ToString() + "\":\"" + p.GetValue(o, null) + "\"");
    31        }
    32        return propertyslist;
    33    }
    34    /**
    35      * 将一个对象的所有属性和属性值按json的格式要求输入为一个封装后的结果。
    36      *
    37      * 返回值类似{"属性1":"属性1值","属性2":"属性2值","属性3":"属性3值"}
    38      * 
    39      * 
    */
    40    private string OneObjectToJSON(object o)
    41    {
    42        string result = "{";
    43        List<string> ls_propertys = new List<string>();
    44        ls_propertys = GetObjectProperty(o);
    45        foreach (string str_property in ls_propertys)
    46        {
    47            if (result.Equals("{"))
    48            {
    49                result = result + str_property;
    50            }
    51            else
    52            {
    53                result = result + "," + str_property + "";
    54            }
    55        }
    56        return result + "}";
    57    }
    58    #endregion
    59    /**
    60          * 把对象列表转换成json串
    61          * 
    */
    62    public string toJSON(List<object> objlist)
    63    {//覆写,给懒人一个不写classname的机会
    64        return toJSON(objlist, string.Empty);
    65    }
    66    public string toJSON(List<object> objlist, string classname)
    67    {
    68        string result = "{";
    69        if (classname.Equals(string.Empty))//如果没有给定类的名称,那么自做聪明地安一个
    70        {
    71            object o = objlist[0]
    72            classname = o.GetType().ToString();
    73        }
    74        result += "\"" + classname + "\":[";
    75        bool firstline = true;//处理第一行前面不加","号
    76        foreach (object oo in objlist)
    77        {
    78            if (!firstline)
    79            {
    80                result = result + "," + OneObjectToJSON(oo);
    81            }
    82            else
    83            {
    84                result = result + OneObjectToJSON(oo) + "";
    85                firstline = false;
    86            }
    87        }
    88        return result + "]}";
    89    }
    90 
    91 }
    92




    OK,我们建立一个测试来验证一下它是否生效。

    先建立一个对象定义person.cs


    Code

    [copy to clipboard]

    namespace Model
    {
        
    public class Person
        {
            
    public string ID { getset; }
            
    public string Name { getset; }
            
    public string Sex { getset; }
        }
    }




    然后建立测试类

    我用了一种非常原始的方法生成了对象列表,其实可以从数据库查询,怕把事情搞得太复杂。呵呵。


    Code

    [copy to clipboard]

    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串已经生成了。
  • 相关阅读:
    防止表单重复提交的几种策略
    Linux模块
    ASP.Net MVC3 图片上传详解(form.js,bootstrap)
    在ASP.NET MVC3 中利用Jsonp跨域访问
    C# 利用反射动态创建对象——带参数的构造函数和String类型
    第一章 CLR 的执行模型
    Linux Shell脚本攻略 读书笔记
    使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore
    验证码识别的一些总结及相关代码
    使用DateTime的ParseExact方法实现特殊日期时间的方法详解(转)
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1540482.html
Copyright © 2011-2022 走看看