Json List<T> DataTable 数据相互转换

    JsonHandler类:下载

       做Web应用开发的同学,难免有些用到数据交互,而前端比较常用,而且十分好用的就是Json格式的数据了。     

       JSON的优点:         

          1、基于纯文本,跨平台传递极其简单;

          2、Javascript原生支持,后台语言几乎全部支持;

          3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

          4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

          5、容易编写和解析,当然前提是你要知道数据结构;

       先将JsonHandler类源码贴上大家看一遍,接着我们用例子演示说明:     

001 public  class JsonHandler
002 {
003     /// <summary>
004     /// DataTable转成Json
005     /// </summary>
006     /// <param name="jsonName">Json名</param>
007     /// <param name="dt">table数据</param>
008     /// <returns></returns>
009     public static string DataTableToJson(string jsonName, DataTable dt)
010     {
011         StringBuilder Json = new StringBuilder();
012         Json.Append("{\"" + jsonName + "\":[");
013         if (dt.Rows.Count > 0)
014         {
015             for (int i = 0; i < dt.Rows.Count; i++)
016             {
017                 Json.Append("{");
018                 for (int j = 0; j < dt.Columns.Count; j++)
019                 {
020                     Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");
021                     if (j < dt.Columns.Count - 1)
022                     {
023                         Json.Append(",");
024                     }
025                 }
026                 Json.Append("}");
027                 if (i < dt.Rows.Count - 1)
028                 {
029                     Json.Append(",");
030                 }
031             }
032         }
033         Json.Append("]}");
034         return Json.ToString();
035     }
036     
037     
038     /// <summary>
039     /// DataTable转成Json
040     /// </summary>
041     /// <param name="dt">table数据</param>
042     /// <returns></returns>
043     public static string DataTableToJson(DataTable dt)
044     {
045         StringBuilder Json = new StringBuilder();
046         Json.Append("[");
047         if (dt.Rows.Count > 0)
048         {
049             for (int i = 0; i < dt.Rows.Count; i++)
050             {
051                 Json.Append("{");
052                 for (int j = 0; j < dt.Columns.Count; j++)
053                 {
054                     Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");
055                     if (j < dt.Columns.Count - 1)
056                     {
057                         Json.Append(",");
058                     }
059                 }
060                 Json.Append("}");
061                 if (i < dt.Rows.Count - 1)
062                 {
063                     Json.Append(",");
064                 }
065             }
066         }
067         Json.Append("]");
068         return Json.ToString();
069     }
070     
071     /// <summary>
072     /// List转成json
073     /// </summary>
074     /// <typeparam name="T">数据类型</typeparam>
075     /// <param name="jsonName">Json名</param>
076     /// <param name="IL">数列</param>
077     /// <returns></returns>
078     public static string ObjectToJson<T>(string jsonName, IList<T> IL)
079     {
080         StringBuilder Json = new StringBuilder();
081         Json.Append("{\"" + jsonName + "\":[");
082         if (IL.Count > 0)
083         {
084             for (int i = 0; i < IL.Count; i++)
085             {
086                 T obj = Activator.CreateInstance<T>();
087                 Type type = obj.GetType();
088                 PropertyInfo[] pis = type.GetProperties();
089                 Json.Append("{");
090                 for (int j = 0; j < pis.Length; j++)
091                 {
092                     Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + pis[j].GetValue(IL[i], null) + "\"");
093                     if (j < pis.Length - 1)
094                     {
095                         Json.Append(",");
096                     }
097                 }
098                 Json.Append("}");
099                 if (i < IL.Count - 1)
100                 {
101                     Json.Append(",");
102                 }
103             }
104         }
105         Json.Append("]}");
106         return Json.ToString();
107     }
108     
109     
110     /// <summary>
111     /// List转成json
112     /// </summary>
113     /// <typeparam name="T">数据类型</typeparam>
114     /// <param name="IL">数列</param>
115     /// <returns></returns>
116     public static string ObjectToJson<T>(IList<T> IL)
117     {
118         StringBuilder Json = new StringBuilder();
119         Json.Append("[");
120         if (IL.Count > 0)
121         {
122             for (int i = 0; i < IL.Count; i++)
123             {
124                 T obj = Activator.CreateInstance<T>();
125                 Type type = obj.GetType();
126                 PropertyInfo[] pis = type.GetProperties();
127                 Json.Append("{");
128                 for (int j = 0; j < pis.Length; j++)
129                 {
130                     Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + pis[j].GetValue(IL[i], null) + "\"");
131                     if (j < pis.Length - 1)
132                     {
133                         Json.Append(",");
134                     }
135                 }
136                 Json.Append("}");
137                 if (i < IL.Count - 1)
138                 {
139                     Json.Append(",");
140                 }
141             }
142         }
143         Json.Append("]");
144         return Json.ToString();
145     }
146     
147     /// <summary>
148     /// Model 转换为Json
149     /// </summary>
150     /// <typeparam name="T">数据类型</typeparam>
151     /// <param name="obj">数据对象</param>
152     /// <returns></returns>
153     public static string ObjectToJson<T>(T o)
154     {
155         StringBuilder Json = new StringBuilder();
156         T obj = Activator.CreateInstance<T>();
157         Type type = obj.GetType();
158         PropertyInfo[] Pi = type.GetProperties();
159         Json.Append("{");
160         for (int i = 0; i < Pi.Length; i++)
161         {
162             Json.Append("\"" + Pi[i].Name.ToString() + "\":\"" + Pi[i].GetValue(o, null) + "\"");
163             if (i < Pi.Length - 1)
164             {
165                 Json.Append(",");
166             }
167         }
168         Json.Append("}");
169         return Json.ToString();
170     }
171 }

       现在我们来演示将List<>、Model、DataTable转换为Json 字符串吧:

       我们先定义一个Person类:       

01 public class person
02     {
03         /// <summary>
04         /// 姓名
05         /// </summary>
06         public string Name
07         {
08             get;
09             set;
10         }
11         /// <summary>
12         /// 姓别
13         /// </summary>
14         public int Sex
15         {
16             get;
17             set;
18         }
19         /// <summary>
20         /// 联系邮箱
21         /// </summary>
22         public string Email
23         {
24             get;
25             set;
26         }
27     }

       初始化数据,初始化Peroson类数据,与初始化个DataTable:     

01 ///person1
02 person Jacky = new person();
03 Jacky.Name = "jacky";
04 Jacky.Sex = 1;
05 Jacky.Email = "Jacky@3api.com";
06     
07 ///person2
08 person yaobo = new person();
09 yaobo.Name = "yaobo";
10 yaobo.Sex = 1;
11 yaobo.Email = "yaobo@3api.com";
12     
13 ///List类型
14 List<person> PersonList = new List<person>();
15 PersonList.Add(Jacky);
16 PersonList.Add(yaobo);
17     
18 ///创建DataTable
19 DataTable dtA = new DataTable();
20 dtA.Columns.Add("id");
21 dtA.Columns.Add("name");
22 DataRow dr;
23 dr = dtA.NewRow();
24 dr["id"] = 1;
25 dr["name"] = "jacky";
26 dtA.Rows.Add(dr);
27 dr = dtA.NewRow();
28 dr["id"] = 2;
29 dr["name"] = "yaobo";
30 dtA.Rows.Add(dr);

      模型Model转换为Json

1 ///model 转换为Json
2 string JSON = JsonHandler.ObjectToJson<person>(Jacky);
3 Response.Write(JSON);

      结果:

1 {"Name":"jacky","Sex":"1","Email":"Jacky@3api.com"}

       List 转换为Json

1 ///输出不带name 的json数据
2 string PersonListJson = JsonHandler.ObjectToJson<person>(PersonList);
3 Response.Write(PersonListJson);
4              
5 ///输出带name 的json数据
6 string name_PersonListJson = JsonHandler.ObjectToJson<person>("Data", PersonList);
7 Response.Write(name_PersonListJson);

       结果:

1 ///不带name结果
2 [{"Name":"jacky","Sex":"1","Email":"Jacky@3api.com"},{"Name":"yaobo","Sex":"1","Email":"yaobo@3api.com"}]
3     
4 ///带name结果
5 {"Data":[{"Name":"jacky","Sex":"1","Email":"Jacky@3api.com"},{"Name":"yaobo","Sex":"1","Email":"yaobo@3api.com"}]}

       DataTable 转换为Json

1 ///输出不带name 的json数据
2 string PersonDataTableJson = JsonHandler.DataTableToJson(dtA);
3 Response.Write(PersonDataTableJson);
4     
5 ///输出带name 的json数据
6 string name_PersonDataTableJson = JsonHandler.DataTableToJson("DataTable", dtA);

       结果:

1 ///不带name
2 [{"id":"1","name":"jacky"},{"id":"2","name":"yaobo"}]
3     
4 ///带name
5 {"DataTable":[{"id":"1","name":"jacky"},{"id":"2","name":"yaobo"}]}

      



/**************************************************************************************************/

List<T>转Json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  static  string  Obj2Json<T>(T data)
{
     try
     {
         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new  System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
         using  (MemoryStream ms = new  MemoryStream())
         {
             serializer.WriteObject(ms, data);
             return  Encoding.UTF8.GetString(ms.ToArray());
         }
     }
     catch
     {
         return  null ;
     }
}

Json转List<T>

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  static  Object Json2Obj(String json,Type t)
{
     try
     {
         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new  System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
         using  (MemoryStream ms = new  MemoryStream(Encoding.UTF8.GetBytes(json)))
         {
            
             return   serializer.ReadObject(ms);
         }
     }
     catch
     {
         return  null ;
     }
}
 

DataTable 转Json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public  static  string  DataTable2Json(DataTable dt)
{
     if  (dt.Rows.Count == 0)
     {
         return  "" ;
     }
 
     StringBuilder jsonBuilder = new  StringBuilder();
     // jsonBuilder.Append("{");
     //jsonBuilder.Append(dt.TableName.ToString()); 
     jsonBuilder.Append( "[" ); //转换成多个model的形式
     for  ( int  i = 0; i < dt.Rows.Count; i++)
     {
         jsonBuilder.Append( "{" );
         for  ( int  j = 0; j < dt.Columns.Count; j++)
         {
             jsonBuilder.Append( "\"" );
             jsonBuilder.Append(dt.Columns[j].ColumnName);
             jsonBuilder.Append( "\":\"" );
             jsonBuilder.Append(dt.Rows[i][j].ToString());
             jsonBuilder.Append( "\"," );
         }
         jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
         jsonBuilder.Append( "}," );
     }
     jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
     jsonBuilder.Append( "]" );
     //  jsonBuilder.Append("}");
     return  jsonBuilder.ToString();
}

单个对象转JSON

 

?
1
2
3
4
5
6
7
8
9
public  static  T Json2Obj<T>( string  json)
{
     T obj = Activator.CreateInstance<T>();
     using  (System.IO.MemoryStream ms = new  System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
     {
         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new  System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
         return  (T)serializer.ReadObject(ms);
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值