zoukankan      html  css  js  c++  java
  • ORM映射框架总结终极JSON

    1. 简单介绍一下JSON

      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式。也正是因为这样,它能够在各种计算机语言中蓬勃发展。

      JSON 的结构:

      1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

      2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

      

    2.C# 实体对象转化为JSON

    代码
      1 /**
      2  * 
      3  * 2009-5-26
      4  * 
      5  * 
      6  * 将某个对象转化为Json数据格式
      7  * */
      8 using System;
      9 using System.Collections.Generic;
     10 using System.Linq;
     11 using System.Text;
     12 using System.IO;
     13 using System.Data;
     14 using System.ServiceModel.Web;
     15 using System.Runtime.Serialization;
     16 using System.Runtime.Serialization.Json;
     17 
     18 namespace CommonData.Json
     19 {
     20     public class ObjectSerialization
     21     {
     22         private object _entity;
     23 
     24         /// <summary>
     25         /// 被序列化得实体对象
     26         /// </summary>
     27         public object Entity
     28         {
     29             get { return _entity; }
     30             set { _entity = value; }
     31         }
     32 
     33         private string _jsonData;
     34 
     35         /// <summary>
     36         /// 被转化为json格式数据的对象
     37         /// </summary>
     38         public string JsonData
     39         {
     40             get { return _jsonData; }
     41             set { _jsonData = value; }
     42         }
     43 
     44         /// <summary>
     45         /// 无参数构造方法
     46         /// </summary>
     47         public ObjectSerialization()
     48         { 
     49         }
     50 
     51         /// <summary>
     52         /// 有参数构造方法
     53         /// </summary>
     54         /// <param name="entity">要被序列化得实体对象</param>
     55         public ObjectSerialization(object entity)
     56         {
     57             this._entity = entity;
     58         }
     59 
     60 
     61         /// <summary>
     62         /// 序列化实体对象
     63         /// </summary>
     64         /// <returns></returns>
     65         public string EntityToJson()
     66         {
     67             var serializer = new DataContractJsonSerializer(Entity.GetType());
     68             MemoryStream ms = new MemoryStream();
     69             serializer.WriteObject(ms, Entity);
     70             byte[] myByte = new byte[ms.Length];
     71             ms.Position = 0;
     72             ms.Read(myByte, 0, (int)ms.Length);
     73             string dataString = Encoding.UTF8.GetString(myByte);
     74             return dataString;
     75         }
     76 
     77 
     78         /// <summary>
     79         /// 序列化实体对象
     80         /// </summary>
     81         /// <param name="entity">要被序列化得实体对象</param>
     82         /// <returns></returns>
     83         public string EntityToJson(object entity)
     84         {
     85             this._entity = entity;
     86             return EntityToJson();
     87         }
     88 
     89         /// <summary>
     90         /// 将Json格式数据转换为对象
     91         /// </summary>
     92         /// <returns></returns>
     93         public T GetObjectJson<T>()
     94         {
     95             MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(JsonData));
     96             var serializer = new DataContractJsonSerializer(typeof(T));
     97             T t = (T)serializer.ReadObject(ms);
     98             return t;
     99         }
    100 
    101         /// <summary>
    102         /// 将Json格式数据转换为对象
    103         /// </summary>
    104         /// <param name="jsonData">json数据格式</param>
    105         /// <returns></returns>
    106         public T GetObjectJson<T>(string jsonData)
    107         {
    108             this._jsonData = jsonData;
    109             return GetObjectJson<T>();
    110         }
    111     }
    112 }
    113 

      这个类提供了一个实体对象序列化和反序列化得操作。

      序列化操作

      public string EntityToJson()
            {
                var serializer = new DataContractJsonSerializer(Entity.GetType());
                MemoryStream ms = new MemoryStream();
                serializer.WriteObject(ms, Entity);
                byte[] myByte = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(myByte, 0, (int)ms.Length);
                string dataString = Encoding.UTF8.GetString(myByte);
                return dataString;
            }

       这个方法用到了DataContractJsonSerializer 这个类,这个类是WCF中的一个序列化类,也就是说在.net 3.0 之前是没有的,这个类提供了比Serializable 更好更方便的序列化。我们呢正好赶上了这个大趋势,方便了,很快能够将实体对象序列化为json格式数据。.net 2.0 中操作都是利用反射然后拼接字符串。

       至于反序列也就是上面的相反操作了,但我们的字符串格式和实体对象能够匹配的时候,我们可以将一个字符串重新转化为一个实体对象。

     

    (3). DataTable 序列化json

    代码
      1 /**
      2  * 
      3  * 2009-5-26
      4  * 
      5  * 
      6  * 将DataTable 转化为Json数据格式
      7  * */
      8 using System;
      9 using System.Collections.Generic;
     10 using System.Linq;
     11 using System.Text;
     12 using System.IO;
     13 using System.Data;
     14 using System.ServiceModel.Web;
     15 using System.Runtime.Serialization;
     16 using System.Runtime.Serialization.Json;
     17 
     18 namespace CommonData.Json
     19 {
     20     public class DataTableJson
     21     {
     22         private DataTable _jsonTable;
     23 
     24         /// <summary>
     25         /// DataTable属性
     26         /// </summary>
     27         public DataTable JsonTable
     28         {
     29             get
     30             {
     31                 return _jsonTable;
     32             }
     33             set
     34             {
     35                 _jsonTable = value;
     36             }
     37         }
     38 
     39         /// <summary>
     40         /// 无参构造方法
     41         /// </summary>
     42         public DataTableJson()
     43         {
     44         }
     45 
     46         /// <summary>
     47         /// 有参构造方法
     48         /// </summary>
     49         /// <param name="table">table对象</param>
     50         public DataTableJson(DataTable table)
     51         {
     52             this._jsonTable = table;
     53         }
     54 
     55         /// <summary>
     56         /// 将DataTable 转化为Json数据格式
     57         /// </summary>
     58         /// <returns></returns>
     59         public string ToJson()
     60         {
     61             StringBuilder JsonString = new StringBuilder();
     62             if (_jsonTable != null && _jsonTable.Rows.Count > 0)
     63             {
     64                 JsonString.Append("");
     65                 JsonString.Append("\"Head\":[ ");
     66                 for (int i = 0; i < _jsonTable.Rows.Count; i++)
     67                 {
     68                     JsonString.Append("");
     69                     for (int j = 0; j < _jsonTable.Columns.Count; j++)
     70                     {
     71                         if (j < _jsonTable.Columns.Count - 1)
     72                         {
     73                             JsonString.Append("\"" + _jsonTable.Columns[j].ColumnName.ToString() + "\":" + "\"" + _jsonTable.Rows[i][j].ToString() + "\",");
     74                         }
     75                         else if (j == _jsonTable.Columns.Count - 1)
     76                         {
     77                             JsonString.Append("\"" + _jsonTable.Columns[j].ColumnName.ToString() + "\":" + "\"" + _jsonTable.Rows[i][j].ToString() + "\"");
     78                         }
     79                     }
     80 
     81                     if (i == _jsonTable.Rows.Count - 1)
     82                     {
     83                         JsonString.Append("");
     84                     }
     85                     else
     86                     {
     87                         JsonString.Append("}, ");
     88                     }
     89                 }
     90                 JsonString.Append("]}");
     91                 return JsonString.ToString();
     92             }
     93             else
     94             {
     95                 return null;
     96             }
     97         }
     98 
     99         /// <summary>
    100         /// 将DataTable 转化为Json数据格式
    101         /// </summary>
    102         /// <param name="table">table 对象</param>
    103         /// <returns></returns>
    104         public string ToJson(DataTable table)
    105         {
    106             this._jsonTable = table;
    107             return ToJson();
    108         }
    109     }
    110 }
    111 

      上面是C# 中的DataTable 序列化为JSON ,虽然名为序列化,其实不是序列化,因为DataTable是不能个序列化的,

    所以这里是采用的拼字符串。将表格中的每个属性和每个值都读取出来,拼成JSON 数据格式字符串。

  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/qingyuan/p/JSON.html
Copyright © 2011-2022 走看看