A Helper class with JSON serialization
2008-01-14 16:52
211 查看
直接参考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);
}
}
}
}
手工测试:
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();
}
}
结果:
{"Name":"abe","Age":12}
Name:abe Age:12
请按任意键继续. . .
// 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);
}
}
}
}
手工测试:
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();
}
}
结果:
{"Name":"abe","Age":12}
Name:abe Age:12
请按任意键继续. . .
相关文章推荐
- Simple Class Serialization With JsonCpp
- ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils with Struts2 - JSON - JQuery
- JsonHelper.class
- Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题
- NSJSONSerialization JSONObjectWithData options的解析转论坛
- NSJSONSerialization JSONObjectWithData:
- 使用json-lib-2.1.jar报,org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"-转载
- Class org.apache.struts2.json.JSONWriter can not access a member of class org.springframework.aop.TruePointcut with modifiers "public"
- WCF JSON Serialization error with DateTime.MinVal and UTC
- CPictureHolder - helper class for dealing with picture objects
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- MVC中调用Public_Class时,VS2012老提示:当前上下文中不存在名称“Json”的解决方法
- Serialization:Making a serializable Class
- Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
- Working with JSON Data
- UITableViewCell unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell
- UE4打包安卓项目遇到UATHelper: Packaging (Android (ETC1)): ERROR: cmd.exe failed with args的解决方案
- org.hibernate.WrongClassException: Object with id: 3 was not of the specified subclass
- Background processing with IntentService class
- spring-data-mongo :Error creating bean with name 'indexCreationHelper':