首页 > 代码库 > [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(); } }}
测试结果:
希望有所帮助!谢谢<style type="text/css">.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }</style>
[C#]JavaScriptSerializer 帮助类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。