• ASP.NET json数据的序列化与反序列化


            使用asp.net 做项目不能使用服务器控件的情况也来也多了,没有了服务器控件,前台以后台的数据交互,我觉得json 是不错的选择(特别是使用前框架,ajax请求返回json数据是相当有用的),以前是要用到json数据时就自己去拼数据,一直觉得麻烦,所以就有了这个类。主要也是看了一些网上的资料,和自己使用的心得写的。如果有更好的方法,或者是代码不好,错误度可以提示我,我会改过来。

           我知道.net 3.5 就自带json序列化了,一般都市用来序列化对象。我写的这个类也是有用到这个,因为反序列化简单。但是这个自带的,序列化出来的json格式不标准,有可能在前端用不了(php  json_decode 好像就不能用),所以最好就是要能够标准一些。下面是代码。

     1.这个是序列化的类,使用了自带序列化方法,所以要引入dll(System.ServiceModel.Web;System.Runtime.Serialization)

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Runtime.Serialization.Json;
      4 using System.Linq;
      5 using System.Web;
      6 using System.IO;
      7 using System.Data;
      8 using System.Text;
      9 using System.Reflection;
     10 
     11 namespace json
     12 {
     13     public class Jsonhelp
     14     {
     15       //对象级别的数据json化(最好在.net里使用(除非对象里头的属性都是string类型))
     16       public static string Objecttojson<T>(T t)
     17        {
     18            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
     19            MemoryStream ms = new MemoryStream();
     20            ser.WriteObject(ms, t);
     21            string sJson = Encoding.UTF8.GetString(ms.ToArray());
     22            ms.Close();
     23            return sJson;
     24        }
     25 
     26       //json 数据的反序列化(把json 数据转化为对象)
     27       public static T Jsontoobject<T>(string jsonString)
     28       {
     29           DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
     30           MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
     31           T obj = (T)ser.ReadObject(ms);
     32           return obj;
     33       }
     34 
     35     //针对前端识别不了有属性不是string的情况
     36       public static string ObjecttoSjson<T>(T t)
     37       {  
     38           StringBuilder sJson=new StringBuilder();
     39           Type type = t.GetType();
     40           sJson.Append("{");
     41         foreach (PropertyInfo pi in type.GetProperties())  
     42         {  
     43            object value = pi.GetValue(t, null); //用pi.GetValue获得值  
     44            string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作  
     45            sJson.Append('"');
     46            sJson.Append(name);
     47            sJson.Append('"');
     48            sJson.Append(':');
     49            sJson.Append('"');
     50            sJson.Append(value);
     51            sJson.Append('"');
     52            sJson.Append(',');
     53         }
     54         string strJson = string.Empty;
     55         if (sJson.ToString().Length > 1)
     56         {
     57             sJson.Remove(sJson.Length-1,1);
     58             sJson.Append("}");
     59             strJson = sJson.ToString();
     60         }
     61         else {
     62             strJson="";
     63         }
     64         return strJson;
     65       }
     66      //把datatable 数据序列化为json
     67      public static string Datatabletojson(DataTable dt)
     68      {
     69          StringBuilder sJson = new StringBuilder();
     70          if (dt.Rows.Count > 0) {
     71              sJson.Append("[");
     72              for (int i = 0; i < dt.Rows.Count; i++)
     73              {
     74                  sJson.Append('{');
     75                  for (int j = 0; j < dt.Columns.Count; j++)
     76                  {  
     77                      sJson.Append('"');
     78                      sJson.Append(dt.Columns[j].ColumnName);
     79                      sJson.Append('"');
     80                      sJson.Append(':');
     81                      sJson.Append('"');
     82                      sJson.Append(dt.Rows[i][j].ToString());
     83                      sJson.Append('"');
     84                    
     85                      if (j != dt.Columns.Count - 1)
     86                      {
     87                          sJson.Append(',');
     88                      }     
     89                  }
     90               sJson.Append('}');
     91               sJson.Append(',');
     92 
     93              }
     94          }
     95          sJson.Remove(sJson.Length - 1, 1);
     96          sJson.Append(']'); 
     97          return sJson.ToString();
     98      }
     99 
    100     //链式对象序列化成json
    101      public static string ListobjecttoSjson<T>(List<T> t)
    102      {
    103          StringBuilder sJson=new StringBuilder();
    104          if (t.Count > 0)
    105          {
    106              sJson.Append("[");
    107              foreach (T a in t)
    108              {
    109                  Type type = a.GetType();
    110                  StringBuilder strJson = new StringBuilder();
    111                  strJson.Append("{");
    112                  foreach (PropertyInfo pi in type.GetProperties())
    113                  {
    114                      object value = pi.GetValue(a, null); //用pi.GetValue获得值  
    115                      string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作  
    116                      strJson.Append('"');
    117                      strJson.Append(name);
    118                      strJson.Append('"');
    119                      strJson.Append(':');
    120                      strJson.Append('"');
    121                      strJson.Append(value);
    122                      strJson.Append('"');
    123                      strJson.Append(',');  
    124                  }
    125                  if (strJson.ToString().Length > 1)
    126                  {   strJson.Remove(strJson.Length - 1, 1);
    127                      strJson.Append("}");
    128                  }
    129                  sJson.Append(strJson.ToString());
    130                  sJson.Append(",");
    131              }
    132          }
    133          else {
    134              sJson.Append("");
    135          }
    136          if (sJson.ToString().Length > 1)
    137          {   sJson.Remove(sJson.Length - 1, 1);
    138              sJson.Append("]");
    139          }
    140          return sJson.ToString() ;
    141 
    142      }
    143    
    144 
    145 
    146 
    147     }
    148 }
    View Code

    2.这是使用的例子

     1  protected void Page_Load(object sender, EventArgs e)
     2         {
     3           
     4           //调用.net自带的类库序列化
     5           Person a = new Person();
     6           a.Age = 18;
     7           a.Name = "sb";
     8           string jsonString = Jsonhelp.Objecttojson<Person>(a);
     9           Response.Write(jsonString);
    10 
    11           //调用.net自带的类库序反列化
    12           Person b = new Person();
    13           b = Jsonhelp.Jsontoobject<Person>(jsonString);
    14           Response.Write(b.Name+"<br>");
    15 
    16           //对象序列化前端标准json数据格式
    17           Response.Write(Jsonhelp.ObjecttoSjson<Person>(b)+"<br>");
    18 
    19 
    20           //DataTable 序列化
    21           SqlConnection conn = new SqlConnection();
    22           conn = new SqlConnection();
    23           conn.ConnectionString = "Data Source=(local);Initial Catalog=KuaiPan;User ID=sa;Password=sb";
    24           conn.Open();
    25           string strsql = "select * from tb";
    26           SqlCommand cmd = new SqlCommand(strsql, conn);
    27           SqlDataReader sqlreader = cmd.ExecuteReader();
    28           DataTable dt = new DataTable();
    29           dt.Load(sqlreader);
    30           Response.Write(Jsonhelp.Datatabletojson(dt)+"<br><br><br>");
    31           
    32             
    33           //list对象集序列化 
    34           List<Person >t=new List<Person>();
    35           Person ds = new Person();
    36           ds.Age = 86;
    37           ds.Name = "屌丝";
    38           Person dd = new Person();
    39           dd.Age = 78;
    40           dd.Name = "你妹";
    41           t.Add(ds);
    42           t.Add(dd);
    43           Response.Write(Jsonhelp.ListobjecttoSjson(t));
    View Code

    3.这是结果

  • 相关阅读:
    Spring Boot 入门之持久层篇(三)
    Spring Boot 入门之 Web 篇(二)
    Spring Boot 入门之基础篇(一)
    Java 设计模式之建造者模式(四)
    Java 设计模式之抽象工厂模式(三)
    Java 设计模式之工厂模式(二)
    c++ type_info and typeid
    opengl& 颜色
    OpenGl And 视图
    如何写一个c++插件化系统
  • 原文地址:https://www.cnblogs.com/try-wyh/p/3447321.html
Copyright © 2020-2023  润新知