当前位置: 首页 > 编程笔记 >

C#中JavaScriptSerializer帮助类用法实例

仇龙光
2023-03-14
本文向大家介绍C#中JavaScriptSerializer帮助类用法实例,包括了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#程序设计有所帮助。

 类似资料:
  • 本文向大家介绍winforms 使用帮助类显示帮助,包括了winforms 使用帮助类显示帮助的使用技巧和注意事项,需要的朋友参考一下

  • 我目前正在做一个项目,我们必须从UML图制作代码。我了解UML类图的解剖结构,但我无法理解什么

  • mongols 是一个高性能 C++ 网络库,提供基于 TCP/UDP/HTTP/WebSocket/RESP 等协议为基础的多种服务商基础设施。

  • 问题内容: 我正在使用VS2008Express在NET3.5SP1中构建winForms应用程序。我正在尝试使用System.Web.Script.Serialization库反序列化对象。 错误是:数组反序列化不支持类型’jsonWinForm.Category’。 干杯! 问题答案: 很高兴您发现自己的错误。如果您正在寻找用于JSON序列化的其他工具,则可能需要尝试JSON.Net。

  • 任何一个 web 应用程序会生成很多 HTMl 超文本标记。如果超文本标记是静态的, 那么将 PHP 和 HTML 混合在一个文件里 这种做法是非常高效的。但是,如果这些超文本标记是动态生成的,那么如果没有额外的辅助工具,这个过程将会变得复杂。 Yii 通过 HTML 帮助类来提供生成超文本标记的方法。这个帮助类包含有一系列的用于处理通用的 HTML 标签和其属性以及内容的静态方法。 注意: 如果

  • 我仍然是Java的新手,我正在努力使这个程序适合我的任务。 问题是: 杰夫在你家附近经营着一家当地的零售店。他已与您签订合同,让您创建一个交互式应用程序,以帮助他增加员工工资。创建一个名为 Details 的类,该类将包含员工 ID 号、名字、姓氏和薪水的获取和设置方法。包括一个名为getUpdateSalary()的方法,该方法将使员工的薪水增加10%。在您的主类中,包括一个名为 () 的静态方