將List對(duì)象列表轉(zhuǎn)換成JSON格式的類實(shí)現(xiàn)方法
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時(shí)也易于機(jī)器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。引用于[http://www.json.org/json-zh.html]
一般應(yīng)用中,我習(xí)慣性地把結(jié)果集以更通用的IList<object>對(duì)象列表方式保存(可能會(huì)對(duì)性能有些影響)來(lái)保證類間交互時(shí)的通用性,降低函數(shù)功能對(duì)具體類的耦合。但AJAX調(diào)用時(shí),還需要把對(duì)象列表轉(zhuǎn)換成JSON數(shù)據(jù)交給前端顯示。有麻煩。
研究了一下JSON的對(duì)象定義和集合定義
感覺(jué)利用反射來(lái)生成JSON還比較方便。代碼如下:
Code // // ObjectListToJSON // Copyright (c) 2008 pcode. All rights reserved. // // Author(s): // // pcode,jy@cjlu.edu.cn // 此類用于將List<object>轉(zhuǎn)換為json數(shù)據(jù)格式 // 目前僅能處理一個(gè)object的基礎(chǔ)數(shù)據(jù)類型而且對(duì)[ { }] \等對(duì)json有傷害影響特殊符號(hào)沒(méi)有特殊處理 // 希望有兄弟繼續(xù)完善 using System.Reflection; using System.Collections.Generic; public class ObjectListToJSON { #region 反射一個(gè)對(duì)象所有屬性和屬性值和將一個(gè)對(duì)象的反射結(jié)果封裝成jsons格式 /** * 對(duì)象的全部屬性和屬性值。用于填寫json的{}內(nèi)數(shù)據(jù) * 生成后的格式類似 * "屬性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; } /** * 將一個(gè)對(duì)象的所有屬性和屬性值按json的格式要求輸入為一個(gè)封裝后的結(jié)果。 * * 返回值類似{"屬性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 /** * 把對(duì)象列表轉(zhuǎn)換成json串 * */ public string toJSON(List<object> objlist) {//覆寫,給懶人一個(gè)不寫classname的機(jī)會(huì) return toJSON(objlist, string.Empty); } public string toJSON(List<object> objlist, string classname) { string result = "{"; if (classname.Equals(string.Empty))//如果沒(méi)有給定類的名稱,那么自做聰明地安一個(gè) { object o = objlist[0] classname = o.GetType().ToString(); } result += "\"" + classname + "\":["; bool firstline = true;//處理第一行前面不加","號(hào) foreach (object oo in objlist) { if (!firstline) { result = result + "," + OneObjectToJSON(oo); } else { result = result + OneObjectToJSON(oo) + ""; firstline = false; } } return result + "]}"; } }
OK,我們建立一個(gè)測(cè)試來(lái)驗(yàn)證一下它是否生效。
先建立一個(gè)對(duì)象定義person.cs
namespace Model { public class Person { public string ID { get; set; } public string Name { get; set; } public string Sex { get; set; } } }
然后建立測(cè)試類
我用了一種非常原始的方法生成了對(duì)象列表,其實(shí)可以從數(shù)據(jù)庫(kù)查詢,怕把事情搞得太復(fù)雜。呵呵。
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串已經(jīng)生成了。
以上這篇將List對(duì)象列表轉(zhuǎn)換成JSON格式的類實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法
- java中JSONArray互相轉(zhuǎn)換List的實(shí)現(xiàn)
- 詳解Java中String JSONObject JSONArray List<實(shí)體類>轉(zhuǎn)換
- JSON--List集合轉(zhuǎn)換成JSON對(duì)象詳解
- Java中Json字符串直接轉(zhuǎn)換為對(duì)象的方法(包括多層List集合)
- JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換
- JSON各種轉(zhuǎn)換問(wèn)題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等)
相關(guān)文章
json的前臺(tái)操作和后臺(tái)操作實(shí)現(xiàn)代碼
通常情況下,json的在項(xiàng)目中的應(yīng)用都是在后臺(tái)把數(shù)據(jù)傳到前臺(tái),然后前臺(tái)再獲取json中的數(shù)據(jù).2012-01-01JSON.parse()方法轉(zhuǎn)換對(duì)象的示例以及注意事項(xiàng)
這篇文章主要介紹了JSON.parse()方法轉(zhuǎn)換對(duì)象的示例以及注意事項(xiàng),我們可以使用 JSON.parse() 方法將數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對(duì)象,需要的朋友可以參考下2023-05-05Jquery+asp.net后臺(tái)數(shù)據(jù)傳到前臺(tái)js進(jìn)行解析的方法
我們經(jīng)常用jquery讀取后臺(tái)數(shù)據(jù),后臺(tái)返回?cái)?shù)據(jù)。后臺(tái)數(shù)據(jù)格式就有很多了,但是js里面沒(méi)有什么類型之分2014-05-05淺談JsonObject中的key-value數(shù)據(jù)解析排序問(wèn)題
下面小編就為大家分享一篇淺談JsonObject中的key-value數(shù)據(jù)解析排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12js操作兩個(gè)json數(shù)組合并、去重,以及刪除某一項(xiàng)元素
這篇文章主要介紹了js操作兩個(gè)json數(shù)組合并、去重,以及刪除某一項(xiàng)元素,需要的朋友可以參考下2020-09-09實(shí)現(xiàn)單層json按照key字母順序排序的示例
下面小編就為大家分享一篇實(shí)現(xiàn)單層json按照key字母順序排序的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12