C#中JavaScriptSerializer帮助类用法实例

本文实例讲述了C#中JavaScriptSerializer帮助类用法。分享给大家供大家参考。具体如下:

关键代码如下:

代码如下:

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
namespace YanZhiwei.DotNet3._5.Utilities.Common
{
    /// <summary>
    /// JavaScriptSerializer 帮助类
    /// </summary>
    public static class ScriptSerializerHelper
    {
        #region 处理Json字符串的时间格式问题
        /// <summary>
        /// 处理JsonString的时间格式问题
        /// <para>eg:ScriptSerializerHelper.ParseJsonTime(@"[{'getTime':'\/Date(1419564257428)\/'}]", "yyyyMMdd hh:mm:ss");==>[{'getTime':'20141226 11:24:17'}]</para>
        /// <para>参考:http://www.cnphp6.com/archives/35773 </para>
        /// </summary>
        /// <param name="jsonString">Json字符串</param>
        /// <param name="formart">时间格式化类型</param>
        /// <returns>处理好的Json字符串</returns>
        public static string ParseJsonTime(this string jsonString, string formart)
        {
            if (!string.IsNullOrEmpty(jsonString))
            {
                jsonString = Regex.Replace(jsonString, @"\\/Date\((\d+)\)\\/", match =>
                {
                    DateTime _dateTime = new DateTime(1970, 1, 1);
                    _dateTime = _dateTime.AddMilliseconds(long.Parse(match.Groups[1].Value));
                    _dateTime = _dateTime.ToLocalTime();
                    return _dateTime.ToString(formart);
                });
            }
            return jsonString;
        }
        /// <summary>
        /// 处理JsonString的时间格式问题【时间格式:yyyy-MM-dd HH:mm:ss】
        /// <para>参考:http://www.cnphp6.com/archives/35773 </para>
        /// </summary>
        /// <param name="jsonString">Json字符串</param>
        /// <returns>处理好的Json字符串</returns>
        public static string ParseJsonTime(this string jsonString)
        {
            return ParseJsonTime(jsonString, "yyyy-MM-dd HH:mm:ss");
        }
        #endregion
        #region 利用JavaScriptSerializer将对象序列化成JSON
        /// <summary>
        /// 利用JavaScriptSerializer将对象序列化成JSON字符串
        /// <para>eg:ScriptSerializerHelper.Serialize<Person>(_personList);</para>
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="entityList">对象集合</param>
        /// <returns>json</returns>
        public static string Serialize<T>(this IEnumerable<T> entityList) where T : class
        {
            string _jsonString = string.Empty;
            if (entityList != null)
            {
                JavaScriptSerializer _serializerHelper = new JavaScriptSerializer();
                _serializerHelper.MaxJsonLength = int.MaxValue;
                _jsonString = _serializerHelper.Serialize(entityList);
            }
            return _jsonString;
        }
        #endregion
        #region 利用JavaScriptSerializer将json字符串反序列化
        /// <summary>
        ///利用JavaScriptSerializer将json字符串反序列化
        /// <para>eg:List<Person> _result = (List<Person>)ScriptSerializerHelper.Deserialize<Person>(_jsonString);</para>
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="jsonString"></param>
        /// <returns>IEnumerable</returns>
        public static IEnumerable<T> Deserialize<T>(this string jsonString) where T : class
        {
            IEnumerable<T> _list = null;
            if (!string.IsNullOrEmpty(jsonString))
            {
                JavaScriptSerializer _serializerHelper = new JavaScriptSerializer();
                _list = _serializerHelper.Deserialize<IEnumerable<T>>(jsonString);
            }
            return _list;
        }
        #endregion
    }
}

测试代码如下:

代码如下:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using YanZhiwei.DotNet3._5.UtilitiesTests.Model;
namespace YanZhiwei.DotNet3._5.Utilities.Common.Tests
{
    [TestClass()]
    public class ScriptSerializerHelperTests
    {
        [TestMethod()]
        public void SerializeTest()
        {
            Person _personA = new Person() { Name = "YanZhiweiA", Age = 10, Address = "shanghaiA" };
            Person _personB = new Person() { Name = "YanZhiweiB", Age = 11, Address = "shanghaiB" };
            IList<Person> _personList = new List<Person>();
            _personList.Add(_personA);
            _personList.Add(_personB);
            string _actual = ScriptSerializerHelper.Serialize<Person>(_personList);
            string _expect = "[{\"Name\":\"YanZhiweiA\",\"Age\":10,\"Address\":\"shanghaiA\"},{\"Name\":\"YanZhiweiB\",\"Age\":11,\"Address\":\"shanghaiB\"}]";
            Assert.AreEqual<string>(_expect, _actual);
        }
        [TestMethod()]
        public void DeserializeTest()
        {
            Person _personA = new Person() { Name = "YanZhiweiA", Age = 10, Address = "shanghaiA" };
            Person _personB = new Person() { Name = "YanZhiweiB", Age = 11, Address = "shanghaiB" };
            List<Person> _expected = new List<Person>();
            _expected.Add(_personA);
            _expected.Add(_personB);
            string _jsonString = "[{'Name':'YanZhiweiA','Age':10,'Address':'shanghaiA'},{'Name':'YanZhiweiB','Age':11,'Address':'shanghaiB'}]";
            List<Person> _result = (List<Person>)ScriptSerializerHelper.Deserialize<Person>(_jsonString);
            bool _actual = _expected.SequenceEqual(_result, new PersonCompare());
            Assert.IsTrue(_actual);
        }
        [TestMethod()]
        public void ParseJsonTimeTest()
        {
            string _actual = ScriptSerializerHelper.ParseJsonTime(@"[{'getTime':'\/Date(1419564257428)\/'}]", "yyyyMMdd hh:mm:ss");
            Assert.AreEqual("[{'getTime':'20141226 11:24:17'}]", _actual);
        }
    }
    public class PersonCompare : IEqualityComparer<Person>
    {
        public bool Equals(Person x, Person y)
        {
            return (x.Age == y.Age) && (x.Address == y.Address) && (x.Name == y.Name);
        }
        public int GetHashCode(Person obj)
        {
            return obj.Name.GetHashCode();
        }
    }
}

测试结果如下图所示:

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#使用JavaScriptSerializer序列化时的时间类型处理

    最近在做一个数据交换服务接口,用的 .NET Web API 项目.需要监控每次请求的数据,也就是操作日志.请求数据为实体对象,所以我用了序列化将请求内容读取并写入日志.咋一看,好像并没有什么问题,但是时间却不是我们平常看到的格式.效果图是这样的: 猜测这里是由于 js 初始化时间的时候往往是向 1970/01/01 添加毫秒数,JavaScriptSerializer 进行序列化的时候也会格式化为距离1970/01/01 到当前时间点 GMT+0 时间的毫秒数,如果直接反序列化可以看到少了8小

  • C# JavaScriptSerializer序列化时的时间处理详解

    最近被序列化困扰了一下下.原因看下面代码 class Program { static void Main(string[] args) { var user = new User { UserId = "sb", CreateDate = DateTime.Now }; var serialier = new JavaScriptSerializer(); var json = serialier.Serialize(user); Console.WriteLine(json); C

  • C#中JavaScriptSerializer帮助类用法实例

    本文实例讲述了C#中JavaScriptSerializer帮助类用法.分享给大家供大家参考.具体如下: 关键代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Web.Script.Serialization; namespace YanZhiwei.DotNet3._5.Utilities.Common {    

  • java中静态导入机制用法实例详解

    java中静态导入机制用法实例详解 这里主要讲解了如何使用Java中静态机制的用法,这里提供了简单实例大家可以参考下. 静态常量类 在java开发中,我们会经常用到一些静态常量用于状态判断等操作.为了能够在多个地方复用这些常量,通常每个模块都会加一个常量类,举个简单的列子: import com.sky.OrderMouleConsstants; /** * Created by gantianxing on 2017/4/21. */ public class Test { public vo

  • C#中的HttpWebRequest类用法详解

    HttpWebRequest 是一个Http 请求类,继承于 WebRequest. WebRequest 是一个抽象类,能够对统一资源标识符 (URI) 发出请求. WebRequest 有以下派生类: System.IO.Packaging.PackWebRequest System.Net.FileWebRequest System.Net.FtpWebRequest System.Net.HttpWebRequest 使用时 using System.Net; 1,HttpWebRequ

  • .NET Core中的HttpClientFactory类用法详解

    一.HttpClient使用 在C#中,如果我们需要向某特定的URL地址发送Http请求的时候,通常会用到HttpClient类.会将HttpClient包裹在using内部进行声明和初始化,如下面的代码: using (var httpClient = new HttpClient()) { // 逻辑处理代码 } HttpClient类包含了许多有用的方法,使用上面的代码,可以满足绝大多数的需求,但是如果对其使用不当时,可能会出现意想不到的事情. 上面代码的技术范点:当你使用继承了IDisp

  • Sql Server中Substring函数的用法实例解析

    SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分.这个函数的名称在不同的资料库中不完全一样: MySQL: SUBSTR( ), SUBSTRING( ) Oracle: SUBSTR( ) SQL Server: SUBSTRING( ) SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的'abd'给提取出来,则可用substring 来实现: select substring('abdcsef'

  • Python中np.linalg.norm()用法实例总结

    目录 前言 用法 总结 前言 np.linalg.norm()用于求范数,linalg本意为linear(线性) + algebra(代数),norm则表示范数. 用法 np.linalg.norm(x, ord=None, axis=None, keepdims=False) 1.x: 表示矩阵(一维数据也是可以的~) 2.ord: 表示范数类型 向量的范数: 矩阵的向量: ord=1:表示求列和的最大值 ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根 ord=∞:表

  • java中Calendar类用法实例详解

    本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calendar常量(field)的作用 Calendar cal = Calendar.getInstance(); cal.get(Calendar.DATE);//-----------------------当天 1-31 cal.get(Calendar.DAY_OF_MONTH);//------

  • Python中Class类用法实例分析

    本文实例讲述了Python中Class类用法.分享给大家供大家参考,具体如下: 尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦.因此我们关注Python在FP上的优势的同时,还得了解一下Python在OO方面的特性. 要讨论Python的OO特性,了解Python中的Class自然是首当其冲了.在Python中定义class和创建对象实例都很简单,具体代码如下: class GrandPa: def __

  • ES6中class类用法实例浅析

    本文实例讲述了ES6中class类用法.分享给大家供大家参考,具体如下: 类语法是ES6中新增的一个亮点特色.我们熟悉的JavaScript终于迎来了真正意义上的类.在之前,想要通过javascript来实现类,通常会采用如下构造函数的模式: function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.friends = ['Shelby','Court']; } Person.pro

  • python中元类用法实例

    本文实例讲述了python中元类用法,分享给大家供大家参考.具体方法分析如下: 1.元类(metaclass)是用来创建类的类 2.type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bases__中,dict的值存到__dict__中 复制代码 代码如下: class X: ... 

随机推荐