json与泛型互转和json与datatable互转

本文介绍了一个用于处理JSON数据的实用工具类JSonUtil。该类提供了多种方法,包括序列化对象到JSON字符串、反序列化JSON字符串到对象、转换JSON数据到指定类型等。此外还介绍了如何将DataTable转换为JSON格式。
using System;
using System.Collections.Generic;
using System.ServiceModel.Web;
using System.IO;
using System.Text;
using System.Runtime.Serialization.Json;
using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace Tlw.zjxypj.Common
{
    /// <summary>
    /// 创建:sjm
    /// 创建日期:2012-04-27
    /// JSon的基础操作类,JSon语法数据与实体,集合互换
    /// </summary>
    public class JSonUtil
    {
        public static string Serialize(object entity)
        {
            IsoDateTimeConverter dateTimeConverter = new IsoDateTimeConverter();
            dateTimeConverter.DateTimeFormat = "yyyyMMddHHmmss";
            return JsonConvert.SerializeObject(entity, dateTimeConverter);
        }

        public static T Deserialize<T>(string entity)
        {
            try
            {
                return JsonConvert.DeserializeObject<T>(entity);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Deserialize Json:{0} to {1}", entity, typeof(T).FullName), ex);
            }
        }

        public static object Deserialize(string entity, Type type)
        {
            try
            {
                return JsonConvert.DeserializeObject(entity, type);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Deserialize Json:{0} to {1}", entity, type.FullName), ex);
            }
        }

        /// <summary>
        /// 将json数据转换为泛型 (使用utf-8编码)
        /// </summary>
        /// <typeparam name="T">泛型类</typeparam>
        /// <param name="byteData">json数据</param>
        /// <returns></returns>
        public static T ConvertByteDataToObject<T>(string byteData)
        {
            T obj;
            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(byteData)))
            {
                var serializer = new DataContractJsonSerializer(typeof(T));
                obj = (T)serializer.ReadObject(ms);
            }
            return obj;
        }


        /// <summary>
        /// 将泛型转换为json 数据(使用utf-8编码)
        /// </summary>
        /// <typeparam name="T">泛型类</typeparam>
        /// <param name="obj">转换对象</param>
        /// <returns></returns>
        public static string ConvertObjectToByteData<T>(T obj)
        {
            string result;
            using (var ms = new MemoryStream())
            {
                var serializer = new DataContractJsonSerializer(typeof(T));
                serializer.WriteObject(ms, obj);
                ms.Position = 0;
                result = Encoding.UTF8.GetString(ms.ToArray());
            }
            return result;
        } 
        /// <summary>
        /// 转换DataTable 为JSON
        /// </summary>
        /// <param name="dt">转换对象</param>
        /// <returns></returns>
        public static string ConvertDataTableToJson(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();
        }
        /// <summary>
        /// 转换DataTable 为JSON
        /// </summary>
        /// <param name="dt">转换对象</param>
        /// <returns></returns>
        public static string ConvertDataTableToJson1(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();
        }



    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值