关键代码:
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; }