将List对象列表转换成JSON格式的类

发布于:2021-06-11 07:05:45

将 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] // // ObjectListToJSON // Copyright (c) 2008 pcode. All rights reserved. // // Author(s): // // pcode,[email]jy@cjlu.edu.cn[/email] // 此类用于将 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":"属性值 "} * * */ 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

Code [copy to clipboard] namespace Model { public class Person { public string ID { get; set; } public string Name { get; set; } public string Sex { get; set; } } }

然后建立测试类

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

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 串已经生成了。


相关推荐

最新更新

猜你喜欢