天天看點

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

引入 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]

[DataMember(Name = "id")]

[IgnoreDataMember]

輸出結果: {"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());

            }

        }

        /// 返序列化Json

        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);

    }