C#通用Json格式序列化和反序列化的方法

简介: 引入 System.Runtime.Serialization.Json命名空间使用 DataContractJsonSerializer类实现序列化序列化类:People public class People { public int Id {...

引入 System.Runtime.Serialization.Json命名空间使用 DataContractJsonSerializer类实现序列化

序列化类:People

 
public class People
{
public int Id { get ; set ; }
public string Name { get ; set ; }
}
执行序列化反序列化
 
protected void Page_Load( object sender, EventArgs e)
{
People people
= new People();
people.Id
= 1 ;
people.Name
= " 小白 " ;


DataContractJsonSerializer json
= new DataContractJsonSerializer(people.GetType());
string szJson = "" ;
// 序列化
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, people);
szJson
= Encoding.UTF8.GetString(stream.ToArray());
}
// 反序列化
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer
= new DataContractJsonSerializer( typeof (People));
People _people
= (People)serializer.ReadObject(ms);
}
}

szJson输出结果:{"Id":1,"Name":"小白"}


可以使用IgnoreDataMember:指定该成员不是数据协定的一部分且没有进行序列化,DataMember:定义序列化属性参数,使用DataMember属性标记字段必须使用DataContract标记类
否则DataMember标记不起作用。

 
[DataContract]
public class People
{
[DataMember(Name
= " id " )]
public int Id { get ; set ; }
[IgnoreDataMember]
public string Name { get ; set ; }
}

输出结果: {"id":1}

 

 

 

进行简单封装一下

 

using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;

namespace RRQ.Common
{
     public  static  class JsonExtension
    {
         ///   <summary>
        
///  序列化Json
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="target"></param>
        
///   <returns></returns>
         public  static  string JsonSerialize<T>( this  object target)
        {
            T result = (T)target;

            DataContractJsonSerializer json =  new DataContractJsonSerializer(result.GetType());

             using (MemoryStream stream =  new MemoryStream())
            {
                json.WriteObject(stream, result);
                 return Encoding.UTF8.GetString(stream.ToArray());
            }
        }

         ///   <summary>
        
///  返序列化Json
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="target"></param>
        
///   <returns></returns>
         public  static T JsonDeserialize<T>( this  string target)
        {
             using (MemoryStream ms =  new MemoryStream(Encoding.UTF8.GetBytes(target)))
            {
                DataContractJsonSerializer serializer =  new DataContractJsonSerializer( typeof(T));
                 return (T)serializer.ReadObject(ms);
            }
        }
    }
}

 

 

目录
相关文章
|
2天前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
6 0
|
2天前
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
4 0
|
2天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
6 0
|
3天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
19 2
|
3天前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
4天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
4天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
4天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
2月前
|
存储 XML JSON
数据传输的艺术:深入探讨序列化与反序列化
数据传输的艺术:深入探讨序列化与反序列化
59 0
|
2月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0