直接参考ScottGu的blog,在其基础上加上了一个在String类型上的反向串行化的扩展,当出现异常时俘获异常,返回默认值。一个问题需要指出:这些方法中用到的JavaScriptSerializer已经obsolete了,建议选择System.Runtime.Serialization.DataContractJsonSerializer作为替代。有空我会研究如何使用新的类来完成工作。
//
Kwan Data Library
//
// Copyright @ Joshua Kwan, 2008
// joshuakwan@live.cn
namespace Kwan.Data
{
using System;
using System.Web.Script.Serialization;
using System.Runtime.Serialization;
/// <summary>
/// A Helper class for Object Serialization & Deserialization with JSON
/// </summary>
/// <remarks> This class make use of extension methods </remarks>
public static class JSONHelper
{
/// <summary>
/// Serialize the object to JSON string
/// </summary>
/// <param name="obj"> Target object </param>
/// <returns> The serialized JSON string </returns>
public static string ToJSON( this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
/// <summary>
/// Serialize the object to JSON string
/// </summary>
/// <param name="obj"> Target object </param>
/// <param name="recursionDepth"> How deep the method recurses
/// when serializing an object graph </param>
/// <returns> The serialized JSON string </returns>
public static string ToJSON( this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
/// <summary>
/// Deserialize an object from a JSON string
/// </summary>
/// <typeparam name="T"> Object type </typeparam>
/// <param name="jsonString"> Serialized JSON string </param>
/// <returns> The deserialized object </returns>
/// <remarks> If input string is not a valid JSON string,
/// or type notmatched, return a default new object </remarks>
public static T DeserializeFromJSON < T > ( this string jsonString)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
try
{
return serializer.Deserialize < T > (jsonString);
}
catch (Exception ex)
{
return default (T);
}
}
}
}
//
// Copyright @ Joshua Kwan, 2008
// joshuakwan@live.cn
namespace Kwan.Data
{
using System;
using System.Web.Script.Serialization;
using System.Runtime.Serialization;
/// <summary>
/// A Helper class for Object Serialization & Deserialization with JSON
/// </summary>
/// <remarks> This class make use of extension methods </remarks>
public static class JSONHelper
{
/// <summary>
/// Serialize the object to JSON string
/// </summary>
/// <param name="obj"> Target object </param>
/// <returns> The serialized JSON string </returns>
public static string ToJSON( this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
/// <summary>
/// Serialize the object to JSON string
/// </summary>
/// <param name="obj"> Target object </param>
/// <param name="recursionDepth"> How deep the method recurses
/// when serializing an object graph </param>
/// <returns> The serialized JSON string </returns>
public static string ToJSON( this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
/// <summary>
/// Deserialize an object from a JSON string
/// </summary>
/// <typeparam name="T"> Object type </typeparam>
/// <param name="jsonString"> Serialized JSON string </param>
/// <returns> The deserialized object </returns>
/// <remarks> If input string is not a valid JSON string,
/// or type notmatched, return a default new object </remarks>
public static T DeserializeFromJSON < T > ( this string jsonString)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
try
{
return serializer.Deserialize < T > (jsonString);
}
catch (Exception ex)
{
return default (T);
}
}
}
}
手工测试:
class
Program
{
static void Main( string [] args)
{
Person p = new Person( " abe " , 12 );
string jsonStr = p.ToJSON();
Console.WriteLine(jsonStr);
Person dp = jsonStr.DeserializeFromJSON < Person > ();
Console.WriteLine(dp);
dp = " test " .DeserializeFromJSON < Person > ();
Console.ReadLine();
}
}
{
static void Main( string [] args)
{
Person p = new Person( " abe " , 12 );
string jsonStr = p.ToJSON();
Console.WriteLine(jsonStr);
Person dp = jsonStr.DeserializeFromJSON < Person > ();
Console.WriteLine(dp);
dp = " test " .DeserializeFromJSON < Person > ();
Console.ReadLine();
}
}
结果:
{
"
Name
"
:
"
abe
"
,
"
Age
"
:
12
}
Name:abe Age: 12
请按任意键继续. . .
Name:abe Age: 12
请按任意键继续. . .