首页 > 编程 > JavaScript > 正文

[C#]JavaScriptSerializer帮助类

2019-11-14 16:16:35
字体:
来源:转载
供稿:网友

关键代码:

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();        }    }}
测试结果:
image
希望有所帮助!谢谢

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表