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#程序设计有所帮助。