C# Json处理日期和Table

简介: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;   
using System.Runtime.Serialization.Json;   
using System.IO;   
using System.Text;   
using System.Text.RegularExpressions;   
/// <summary>  
/// JSON序列化和反序列化辅助类  
/// </summary>  
public class JsonHelper  
{  
     /// <summary>  
    /// JSON序列化  
    /// </summary>  
     public static string JsonSerializer<T>(T t)  
     {  
         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
         MemoryStream ms = new MemoryStream();  
        ser.WriteObject(ms, t);  
         string jsonString = Encoding.UTF8.GetString(ms.ToArray());  
         ms.Close();  
         //替换Json的Date字符串  
         string p = @"///Date/((/d+)/+/d+/)///"; /*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/
         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
          Regex reg = new Regex(p);  
         jsonString = reg.Replace(jsonString, matchEvaluator);  
         return jsonString;  
     }  
     /// <summary>  
     /// JSON反序列化  
     /// </summary>  
     public static T JsonDeserialize<T>(string jsonString)  
     {  
         //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式  
         string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";  
        MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  
        Regex reg = new Regex(p);  
         jsonString = reg.Replace(jsonString, matchEvaluator);  
         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
         T obj = (T)ser.ReadObject(ms);  
         return obj;  
     }  
    
     /// <summary>  
     /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串  
     /// </summary>  
     private static string ConvertJsonDateToDateString(Match m)  
     {  
         string result = string.Empty;  
         DateTime dt = new DateTime(1970,1,1);  
         dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));  
         dt = dt.ToLocalTime();  
         result = dt.ToString("yyyy-MM-dd HH:mm:ss");  
        return result;  
     }  
     /// <summary>  
     /// 将时间字符串转为Json时间  
     /// </summary>  
     private static string ConvertDateStringToJsonDate(Match m)  
     {  
         string result = string.Empty;  
         DateTime dt = DateTime.Parse(m.Groups[0].Value);  
         dt = dt.ToUniversalTime();  
         TimeSpan ts = dt - DateTime.Parse("1970-01-01");  
         result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);  
        return result;  
    }  
 }

 

create table Users
(
 UserId int identity(1,1) primary key,
 UserName varchar(20)
)

insert into Users values('Bradley')
insert into Users values('Dan')







 public class JsonHelper
    {
        #region  序列化和反序列化
        // 序列化
        public static  string JsonSerializer<T>(T t)
        {
            // 使用 DataContractJsonSerializer 将 T 对象序列化为内存流。 
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof (T));
            MemoryStream ms = new MemoryStream();
            // 使用 WriteObject 方法将 JSON 数据写入到流中。 
            jsonSerializer.WriteObject(ms, t);
            // 流转字符串
            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            //替换Json的Date字符串  
            string p = @"\\/Date\((\d+)\+\d+\)\\/";   
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
            Regex reg = new Regex(p);   
            jsonString = reg.Replace(jsonString, matchEvaluator);
            return jsonString;
        }
        public static T JsonDeserialize<T>(string  jsonString)
        {
            //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式  
            string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";   
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);   
            Regex reg = new Regex(p);  
            jsonString = reg.Replace(jsonString, matchEvaluator);
            DataContractJsonSerializer jsonSerializer=new DataContractJsonSerializer(typeof(T));
            // 字符串转流
            MemoryStream ms=new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            // 通过使用 DataContractJsonSerializer 的 ReadObject 方法,将 JSON 编码数据反序列化为T 
            T obj = (T) jsonSerializer.ReadObject(ms);
            return obj;
        }
        public static string ConvertJsonDateToDateString(Match match)
        {
            string result = string.Empty;
            DateTime dateTime=new DateTime(1970,1,1);
            dateTime = dateTime.AddMilliseconds(long.Parse(match.Groups[1].Value));
            dateTime = dateTime.ToLocalTime();
            result = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
            return result;
        }
        private static string ConvertDateStringToJsonDate(Match m)
        {
            string result = string.Empty;   
            DateTime dt = DateTime.Parse(m.Groups[0].Value); 
            dt = dt.ToUniversalTime();   
            TimeSpan ts = dt - DateTime.Parse("1970-01-01");  
            result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds);   
            return result;
        }
        #endregion

        // 对象转换为Json
        public static  string  ObjectToJson(object obj)
        {
            JavaScriptSerializer js=new JavaScriptSerializer();
            try
            {
                return js.Serialize(obj);
            }
            catch (Exception exception)
            {
                
                throw new Exception(exception.Message);
            }
        }
        // 数据表转化为集合
        public static List<Dictionary<string,object>> DataTableToList(DataTable dt)
        {
            List<Dictionary<string ,object>> list=new List<Dictionary<string, object>>();
            foreach (DataRow dataRow in dt.Rows)
            {
                Dictionary<string,object> dic=new Dictionary<string, object>();
                foreach (DataColumn dc in dt.Columns)
                {
                    dic.Add(dc.ColumnName,dataRow[dc.ColumnName]);
                }
                list.Add(dic);
            }
            return list;
        }
        // 表转换为Json
        public static string DataTableToJson(DataTable dt)
        {
            return ObjectToJson(DataTableToList(dt));
        }
    }
 来自:http://blog.csdn.net/cncdns/article/details/6164389

 

http://blog.csdn.net/bradleydan/article/details/7927862

 

相关文章
|
2月前
|
JSON 数据格式
SpringMVC-接收请求中的json数据及日期类型参数传递
SpringMVC-接收请求中的json数据及日期类型参数传递
75 0
|
9月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
2月前
|
存储 安全 Unix
C#.Net筑基-类型系统②常见类型--日期和时间的故事
在System命名空间中,有几种表示日期时间的不可变结构体(Struct):DateTime、DateTimeOffset、TimeSpan、DateOnly和TimeOnly。DateTime包含当前本地或UTC时间,以及最小和最大值;DateTimeOffset增加了时区偏移信息,适合跨时区操作。UTC是世界标准时间,而格林尼治标准时间(GMT)不稳定,已被更精确的UTC取代。DateTimeOffset和DateTime提供了转换为UTC和本地时间的方法,以及各种解析和格式化函数。
|
2月前
|
JSON Java 数据格式
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
30 0
|
2月前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
48 0
|
2月前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
57 1
|
2月前
|
JSON C# 数据格式
C# 处理gzip格式的json
C# 处理gzip格式的json
45 0
|
2月前
|
JSON 关系型数据库 MySQL
这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
【1月更文挑战第17天】【1月更文挑战第84篇】这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
53 1
|
2月前
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
88 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
2月前
|
XML 存储 JSON
C# | 使用Json序列化对象时忽略只读的属性
将对象序列化成为Json字符串是一个使用频率非常高的功能。Json格式具有很高的可读性,同时相较于XML更节省空间。 在开发过程中经常会遇到需要保存配置的场景,比如将配置信息保存在配置类型的实例中,再将这个对象序列化成为Json字符串并保存。当需要加载配置时,则是读取Json格式的字符串再将其还原成配置对象。在序列化的过程中,默认会将所有公开的属性和字段都序列化进入Json字符串中,这其中也会包含只读的属性或字段,而只读的属性和字段在反序列化的过程中其实是无意义的,也就是说这一部分存储是多余的。 本文将讲解如何在执行Json序列化时,忽略掉那些只读的属性和字段。
91 0
C# | 使用Json序列化对象时忽略只读的属性