欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

將List對(duì)象列表轉(zhuǎn)換成JSON格式的類實(shí)現(xiàn)方法

 更新時(shí)間:2016年07月04日 10:13:50   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇將List對(duì)象列表轉(zhuǎn)換成JSON格式的類實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論