• .net 实体类与json转换(.net自带类库实现)更新


    上一篇文章中写到在.net中实体类跟json格式的相互转换,今天在做具体转换时候,发现之前版本的jsonhelp对于日期类型的转换不全面。之前版本的jsonhelp中从实体类转换成json格式时候,将日期格式转成了时间戳的形式。在这里对这个jsonhelp做出了更新。以解决转换日期类型字段的问题。代码如下:

    JsonHelp.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.Serialization.Json;
    using System.IO;
    using System.Text.RegularExpressions;
    namespace JsonTest
    {
        class JsonHelp
        {
            public JsonHelp()
            {
                //
                // TODO: Add constructor logic here
                //
            }
            /// <summary>
            /// 把对象序列化 JSON 字符串 
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="obj">对象实体</param>
            /// <returns>JSON字符串</returns>
            public static string GetJson<T>(T obj)
            {
                //记住 添加引用 System.ServiceModel.Web 
                /**
                 * 如果不添加上面的引用,System.Runtime.Serialization.Json; Json是出不来的哦
                 * */
                DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T));
                using (MemoryStream ms = new MemoryStream())
                {
                    json.WriteObject(ms, obj);
                    string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                    string pattern = @"\/Date((d+)+d+)\/";
                    MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
                    Regex reg = new Regex(pattern);
                    jsonString = reg.Replace(jsonString, matchEvaluator);
                    return jsonString;
                }
            }
            /// <summary>
            /// 把JSON字符串还原为对象
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="jsonString">JSON字符串</param>
            /// <returns>对象实体</returns>
            public static T ParseFormJson<T>(string jsonString)
            {
                T obj = Activator.CreateInstance<T>();
                string pattern = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
                MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
                Regex reg = new Regex(pattern);
                jsonString = reg.Replace(jsonString, matchEvaluator);
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
                {
                    DataContractJsonSerializer dcj = new DataContractJsonSerializer(typeof(T));
                    return (T)dcj.ReadObject(ms);
                }
            }
            /// <summary>
            /// 将Json序列化的时间由/Date(1304931520336+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;
            }
    
    
        }
    }
    

    测试代码:

    using ConsoleApplication1.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var db = new JooWMSContext()) 
                {
                    var admin = db.Admins.Where(p => p.ID > 0).OrderBy(p => p.ID);
                    foreach (var ad in admin) 
                    {
                        Console.WriteLine(JsonTest.JsonHelp.GetJson<ConsoleApplication1.Models.Admin>(ad));
                    }
                    Console.ReadKey();
                }
            }
        }
    }
    

    写测试代码时候 用到了EF ,这里推荐一个不错的工具。EF Power Tools 目前是beta4 版本。

  • 相关阅读:
    mobile app 的总结
    ie和火狐javascript区别
    zepto源码注释
    ie6bug
    html5游戏网站
    jquery作者封装函数
    vue element 动态表格
    uniapp 对 系统的控制,全屏,系统虚拟键盘,手机导航,强制横屏
    环形图表记录
    清除所有的滚动条
  • 原文地址:https://www.cnblogs.com/kim-meng/p/5655873.html
Copyright © 2020-2023  润新知