您的位置:首页 > Web前端 > JavaScript

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

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐