[C#]JavaScriptSerializer帮助类

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

关键代码:

usingSystem;usingSystem.Collections.Generic;usingSystem.Text.RegularExPRessions;usingSystem.Web.Script.Serialization;namespaceYanZhiwei.DotNet3._5.Utilities.Common

{/// <summary>///javaScriptSerializer 帮助类/// </summary>publicstaticclassScriptSerializerHelper

{#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>publicstaticstringParseJsonTime(thisstringjsonString,stringformart)

{if(!string.IsNullOrEmpty(jsonString))

{

jsonString = Regex.Replace(jsonString,@"\\/Date\((\d+)\)\\/", match =>

{

DateTime _dateTime =newDateTime(1970, 1, 1);

_dateTime = _dateTime.AddMilliseconds(long.Parse(match.Groups[1].Value));

_dateTime = _dateTime.ToLocalTime();return_dateTime.ToString(formart);

});

}returnjsonString;

}/// <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>publicstaticstringParseJsonTime(thisstringjsonString)

{returnParseJsonTime(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>publicstaticstringSerialize<T>(thisIEnumerable<T> entityList)whereT :class{string_jsonString =string.Empty;if(entityList !=null)

{

JavaScriptSerializer _serializerHelper =newJavaScriptSerializer();

_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>publicstaticIEnumerable<T> Deserialize<T>(thisstringjsonString)whereT :class{

IEnumerable<T> _list =null;if(!string.IsNullOrEmpty(jsonString))

{

JavaScriptSerializer _serializerHelper =newJavaScriptSerializer();

_list = _serializerHelper.Deserialize<IEnumerable<T>>(jsonString);

}return_list;

}#endregion}

}

代码测试:

usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Linq;usingYanZhiwei.DotNet3._5.UtilitiesTests.Model;namespaceYanZhiwei.DotNet3._5.Utilities.Common.Tests

{

[TestClass()]publicclassScriptSerializerHelperTests

{

[TestMethod()]publicvoidSerializeTest()

{

Person _personA =newPerson() { Name ="YanZhiweiA", Age = 10, Address ="shanghaiA"};

Person _personB =newPerson() { Name ="YanZhiweiB", Age = 11, Address ="shanghaiB"};

IList<Person> _personList =newList<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()]publicvoidDeserializeTest()

{

Person _personA =newPerson() { Name ="YanZhiweiA", Age = 10, Address ="shanghaiA"};

Person _personB =newPerson() { Name ="YanZhiweiB", Age = 11, Address ="shanghaiB"};

List<Person> _expected =newList<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,newPersonCompare());

Assert.IsTrue(_actual);

}

[TestMethod()]publicvoidParseJsonTimeTest()

{string_actual = ScriptSerializerHelper.ParseJsonTime(@"[{'getTime':'\/Date(1419564257428)\/'}]","yyyyMMdd hh:mm:ss");

Assert.AreEqual("[{'getTime':'20141226 11:24:17'}]", _actual);

}

}publicclassPersonCompare : IEqualityComparer<Person>

{publicboolEquals(Person x, Person y)

{return(x.Age == y.Age) && (x.Address == y.Address) && (x.Name == y.Name);

}publicintGetHashCode(Person obj)

{returnobj.Name.GetHashCode();

}

}

}

测试结果:

希望有所帮助!谢谢

.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; }

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航