C#中JavaScriptSerializer帮助类用法实例
C#中JavaScriptSerializer帮助类用法实例
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了C#中JavaScriptSerializer帮助类用法。分享给大家供大家参考。具体如下:关键代码如下:复制代码代码如下:us...

本文实例讲述了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#中JavaScriptSerializer帮助类用法实例1

希望本文所述对大家的C#程序设计有所帮助。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类