C#中JavaScriptSerializer幫助類用法實(shí)例
本文實(shí)例講述了C#中JavaScriptSerializer幫助類用法。分享給大家供大家參考。具體如下:
關(guān)鍵代碼如下:
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字符串的時(shí)間格式問題
/// <summary>
/// 處理JsonString的時(shí)間格式問題
/// <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">時(shí)間格式化類型</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的時(shí)間格式問題【時(shí)間格式: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將對(duì)象序列化成JSON
/// <summary>
/// 利用JavaScriptSerializer將對(duì)象序列化成JSON字符串
/// <para>eg:ScriptSerializerHelper.Serialize<Person>(_personList);</para>
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="entityList">對(duì)象集合</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
}
}
測(cè)試代碼如下:
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è)試結(jié)果如下圖所示:
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- django restframework serializer 增加自定義字段操作
- django rest framework serializers序列化實(shí)例
- django rest framework serializer返回時(shí)間自動(dòng)格式化方法
- Django Serializer HiddenField隱藏字段實(shí)例
- django序列化serializers過程解析
- django自帶serializers序列化返回指定字段的方法
- django Serializer序列化使用方法詳解
- 詳解django的serializer序列化model幾種方法
- C#使用JavaScriptSerializer序列化時(shí)的時(shí)間類型處理
- C# xmlSerializer簡(jiǎn)單用法示例
- 淺析JavaScriptSerializer類的序列化與反序列化
- Python基于Serializer實(shí)現(xiàn)字段驗(yàn)證及序列化
相關(guān)文章
C#數(shù)據(jù)類型實(shí)現(xiàn)背包、隊(duì)列和棧
本文詳細(xì)講解了C#數(shù)據(jù)結(jié)構(gòu)類型,并實(shí)現(xiàn)背包、隊(duì)列和棧的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#使用正則表達(dá)式實(shí)現(xiàn)首字母轉(zhuǎn)大寫的方法
這篇文章主要介紹了C#使用正則表達(dá)式實(shí)現(xiàn)首字母轉(zhuǎn)大寫的方法,涉及C#基于正則表達(dá)式操作字符串的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11C# 并行和多線程編程——Task進(jìn)階知識(shí)
這篇文章主要介紹了C# 并行和多線程編程——Task進(jìn)階知識(shí)的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02C#簡(jiǎn)易人機(jī)對(duì)抗“石頭剪刀布”游戲的實(shí)現(xiàn)
本文主要介紹了C#簡(jiǎn)易人機(jī)對(duì)抗“石頭剪刀布”游戲的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C#實(shí)現(xiàn)Excel轉(zhuǎn)PDF時(shí)設(shè)置內(nèi)容適應(yīng)頁面寬度
將Excel轉(zhuǎn)為PDF格式時(shí),通常情況下轉(zhuǎn)換出來的PDF頁面都是默認(rèn)的寬度大小。所以本文提供了C#實(shí)現(xiàn)Excel轉(zhuǎn)PDF時(shí)設(shè)置內(nèi)容適應(yīng)頁面寬度的示例代碼,需要的可以參考一下2022-04-04C#實(shí)現(xiàn)順序棧和鏈棧的代碼實(shí)例
今天小編就為大家分享一篇關(guān)于的C#實(shí)現(xiàn)順序棧和鏈棧的代碼實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10