• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#Json序列化和反序列化C#Json序列化和反序列化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
 
方法一、使用 Newtonsoft.Json.dll
核心代码:
public static class JsonExtension
{
    /// <summary>
    /// object转json字符串
    /// </summary>
    public static string ObjectToJson(this object obj)
    {
        if (null == obj)
        {
            return null;
        }

        return JsonConvert.SerializeObject(obj);
    }

    /// <summary>
    /// json字符串转object
    /// </summary>
    public static T JsonToObject<T>(this string jsonString)
    {
        try
        {
            return JsonConvert.DeserializeObject<T>(jsonString);
        }
        catch
        {
            return default(T);
        }
    }

    /// <summary>
    /// 格式化json字符串
    /// </summary>
    public static string ConvertJsonString(this string str)
    {
        // 格式化json字符串
        JsonSerializer serializer = new JsonSerializer();
        TextReader tr = new StringReader(str);
        JsonTextReader jtr = new JsonTextReader(tr);
        object obj = serializer.Deserialize(jtr);
        if (null != obj)
        {
            StringWriter textWriter = new StringWriter();
            JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
            {
                Formatting = Formatting.Indented,
                Indentation = 4,
                IndentChar = ' '
            };
            serializer.Serialize(jsonWriter, obj);
            return textWriter.ToString();
        }
        else
        {
            return str;
        }
    }

}
 

 
方法二、利用系统的 DataContractJsonSerializer 类
引用 System.Runtime.Serialization;
名字空间using System.Runtime.Serialization.Json;
核心代码:
public static class JsonExtension
{
    public static string GetJsonByObject<T>(this T obj)
    {
        if (null == obj)
        {
            return null;
        }

        //实例化DataContractJsonSerializer对象,需要待序列化的对象类型
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));

        //实例化一个内存流,用于存放序列化后的数据
        using (MemoryStream stream = new MemoryStream())
        {
            //使用WriteObject序列化对象
            serializer.WriteObject(stream, obj);

            //写入内存流中
            byte[] dataBytes = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(dataBytes, 0, (int)stream.Length);

            //通过UTF8格式转换为字符串
            return Encoding.UTF8.GetString(dataBytes);
        }   
    }

    public static T GetObjectByJson<T>(this string jsonString)
    {
        try
        {
            //实例化DataContractJsonSerializer对象,需要待序列化的对象类型
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));

            //把Json传入内存流中保存
            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                // 使用ReadObject方法反序列化成对象
                return (T)serializer.ReadObject(stream);
            }
        }
        catch (Exception)
        {
            return default(T);
        }
        
    }

}
 
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
 
方法一、使用 Newtonsoft.Json.dll
核心代码:
public static class JsonExtension
{
    /// <summary>
    /// object转json字符串
    /// </summary>
    public static string ObjectToJson(this object obj)
    {
        if (null == obj)
        {
            return null;
        }

        return JsonConvert.SerializeObject(obj);
    }

    /// <summary>
    /// json字符串转object
    /// </summary>
    public static T JsonToObject<T>(this string jsonString)
    {
        try
        {
            return JsonConvert.DeserializeObject<T>(jsonString);
        }
        catch
        {
            return default(T);
        }
    }

    /// <summary>
    /// 格式化json字符串
    /// </summary>
    public static string ConvertJsonString(this string str)
    {
        // 格式化json字符串
        JsonSerializer serializer = new JsonSerializer();
        TextReader tr = new StringReader(str);
        JsonTextReader jtr = new JsonTextReader(tr);
        object obj = serializer.Deserialize(jtr);
        if (null != obj)
        {
            StringWriter textWriter = new StringWriter();
            JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
            {
                Formatting = Formatting.Indented,
                Indentation = 4,
                IndentChar = ' '
            };
            serializer.Serialize(jsonWriter, obj);
            return textWriter.ToString();
        }
        else
        {
            return str;
        }
    }

}
 

 
方法二、利用系统的 DataContractJsonSerializer 类
引用 System.Runtime.Serialization;
名字空间using System.Runtime.Serialization.Json;
核心代码:
public static class JsonExtension
{
    public static string GetJsonByObject<T>(this T obj)
    {
        if (null == obj)
        {
            return null;
        }

        //实例化DataContractJsonSerializer对象,需要待序列化的对象类型
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));

        //实例化一个内存流,用于存放序列化后的数据
        using (MemoryStream stream = new MemoryStream())
        {
            //使用WriteObject序列化对象
            serializer.WriteObject(stream, obj);

            //写入内存流中
            byte[] dataBytes = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(dataBytes, 0, (int)stream.Length);

            //通过UTF8格式转换为字符串
            return Encoding.UTF8.GetString(dataBytes);
        }   
    }

    public static T GetObjectByJson<T>(this string jsonString)
    {
        try
        {
            //实例化DataContractJsonSerializer对象,需要待序列化的对象类型
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));

            //把Json传入内存流中保存
            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                // 使用ReadObject方法反序列化成对象
                return (T)serializer.ReadObject(stream);
            }
        }
        catch (Exception)
        {
            return default(T);
        }
        
    }

}
 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#SQl通过对视图数据二次查询,统计数据发布时间:2022-07-10
下一篇:
C#把excell轉換成圖片发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap