扩展方法对json序列化及反序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展方法对json序列化及反序列化相关的知识,希望对你有一定的参考价值。

       this+类型名+变量名,.NET 3.0 之后新增的一种特性,叫“扩展方法”。

       int类型变量都能调用toString()方法,将int类型变量转换成string型变量;如果需要更改转换的形式,比如将int类型变量转换成指定格式的字符串,并且这种方法调用非常频繁,可以编写扩展方法。扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

      例如下列代码:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int zzyhost(this String str)
        {         
            return 0;
        }
    }   
}

  那么在其他类下只需要 using ExtensionMethods引入该命名空间;,所有 string 类型的对象就都拥有了 zzyhost() 这个方法,而无需重写一个 string 类,使用时直接调用:

string s = "Hello zzyhost";
int i = s.zzyhost();

       在做web项目时,经常要将对象转json,所以可以将转换方法写成扩展方法,在转换时直接调用。

扩展方法:

/********************************************************************************
** Title:      SerializerUtil
** Author:     dwx
** E-mail       [email protected]
** Date:       2017/5/12 9:12:34
** CLR:        4.0.30319.34209
** Copyright:  Copyright (c) 2017
** Company:    GDwinning 
** Description:json序列化扩展方法
*********************************************************************************/

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;

namespace BLL.Tool
{
    /// <summary>
    /// 扩展方法,json序列化
    /// </summary>
    public static class JsonSerializerUtil
    {
        /// <summary>
        /// json字符串反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        public static T FromJson<T>(this string jsonStr)
        {
            try
            {
                DataContractJsonSerializer seri = new DataContractJsonSerializer(typeof(T));
                using (MemoryStream memory = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
                {
                    T jsonObj = (T)seri.ReadObject(memory);
                    return jsonObj;
                }
            }
            catch
            {
                return default(T);//如果有异常会返回null
            }
        }
        /// <summary>
        /// json序列化
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public static string ToJson(this object item)
        {
            try
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.WriteObject(ms, item);
                    StringBuilder sb = new StringBuilder();
                    sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
                    return sb.ToString();
                }
            }
            catch (Exception ex)
            {
                return "异常信息:" + ex.Message;
            }
        }
    }
}

 调用扩展方法示例:

result res=new result();
string data=null;
//对象序列化
data = res.ToJson();
//json字符串反序列化
result newRes=new result();
newRes=data.FromJson<result>();

  

以上是关于扩展方法对json序列化及反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.x--序列化及反序列化

protobuf--数据序列化及反序列化

通讯协议及Google.Protobuf生成c#代码 序列及反序列化

java--Properties序列化流及反序列化流

drf序列化及反序列化

FastJson 解析序列化及反序列化