.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}\s\d{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 版本。

时间: 2024-08-28 11:01:44

.net 实体类与json转换(.net自带类库实现)更新的相关文章

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

注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; usin

fastjson简单使用demo,@JSONField注解属性字段上与set、get方法上。实体类toString(),实体类转json的区别;_下划线识别

一.demo代码 @JSONField注解属性字段上与set.get方法上.使用@Data注解(lombok插件安装最下方),对属性“笔名”[pseudonym]手动重写setter/getter方法 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; @Data

实体类和JSON对象之间相互转化

. [代码]工具类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 package myUti

实体类转Json的2种方法

首先申明所需jar包: ezmorph-1.0.6.jar jackson-all-1.7.6.jar jsoup-1.5.2.jar 一.创建一个实体类Emp. 1 package com.hyx.entity; 2 3 public class Emp { 4 private Integer id; 5 private String name; 6 private Integer dptNo; 7 private String gender; 8 private String duty; 9

SpringMVC通过实体类返回json格式的字符串,并在前端显示

一.除了搭建springmvc框架需要的jar包外,还需要这两个jar包 jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar 二.web,.xml配置 classpath:spring-servlet.xml指定springmvc配置文件的位置 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" x

C# 实体类转json数据过滤掉字段为null的字段

原文:C# 实体类转json数据过滤掉字段为null的字段 C# 实体类转json数据过滤掉字段为null的字段 语法如下: var jsonSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}; var json = JsonConvert.SerializeObject(data,Formatting.Indented,jsonSetting) 1,null值未处理之前的数据结构

AutoMapper(一)——实现数据契约和实体类之间的转换

以前做过Object到Object的转换方法的封装,底层主要还是靠反射取值赋值+循环来实现的.最近在公司里维护旧系统,这个系统使用了WCF,当时就很好奇他们的数据契约到实体模型的转换时怎么做的,之后查看源码,发现他们居然是一个属性一个属性的赋值过来的,当时就给我雷到了,难道就没有人举得这个地方可以封装起来吗? 据我目前了解,有三种方法可以实现这个实体类到实体类的转换过程,下面来简述下这三种方式. 第一种,也是最简单的一种,是用list自带的转换方法,但是这种方法需要自己定义转换规则,写起来也挺麻

.NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务的变化,也会碰到超级变态的JSON,如果还按照以前的思路,会把人搞抽风掉,一旦结构变化,又要重来.所以今天给大家介绍一个简单的方法,轻轻松松搞定超级变态的JSON,虽然需要生成实体类.它就是开源的:JSON C# Class Generator组件. .NET开源目录:[目录]本博客其他.NET开源

SpringMVC接收String类型时间数值(实体类是Date)转换

SpringMVC接收String类型字符串 bean实体是Date 加入bind @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm