将List对象列表转换成JSON格式的类实现⽅法
⼀般应⽤中,我习惯性地把结果集以更通⽤的IList<object>对象列表⽅式保存(可能会对性能有些影响)来保证类间交互时的通⽤性,降低函数功能对具体类的耦合。但AJAX调⽤时,还需要把对象列表转换成JSON数据交给前端显⽰。有⿇烦。json转换对象
研究了⼀下JSON的对象定义和集合定义
感觉利⽤反射来⽣成JSON还⽐较⽅便。代码如下:
Code
//
// ObjectListToJSON
// Copyright (c) 2008 pcode. All rights reserved.
//
// Author(s):
//
// pcode,jy@cjlu.edu
// 此类⽤于将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格式的类实现⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论