zl程序教程

您现在的位置是:首页 >  前端

当前栏目

浅析JSON序列化与反序列化

JSONJSON 浅析 序列化
2023-06-13 09:15:03 时间

方法一:引入System.Web.Script.Serialization命名空间使用JavaScriptSerializer类实现简单的序列化序列化类:Personnel

复制代码代码如下:

   publicclassPersonnel
       {
           publicintId{get;set;}
           publicstringName{get;set;}
       }

执行序列化反序列化:
复制代码代码如下:

protectedvoidPage_Load(objectsender,EventArgse)
       {
           Personnelpersonnel=newPersonnel();
           personnel.Id=1;
           personnel.Name="小白";

           JavaScriptSerializerjsonSerializer=newJavaScriptSerializer();
           //执行序列化
           stringr1=jsonSerializer.Serialize(personnel);

           //执行反序列化
           Personnel_Personnel=jsonSerializer.Deserialize<Personnel>(r1);
        }


r1输出结果:{"Id":1,"Name":"小白"}
可以使用ScriptIgnore属性标记不序列化公共属性或公共字段。
复制代码代码如下:
       publicclassPersonnel
       {
           [ScriptIgnore]
           publicintId{get;set;}
           publicstringName{get;set;}
       }

r1输出结果:{"Name":"小白"}

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

序列化类:People

复制代码代码如下:
       publicclassPeople
       {
           publicintId{get;set;}
           publicstringName{get;set;}
       }

执行序列化反序列化
复制代码代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
       {
           Peoplepeople=newPeople();
           people.Id=1;
           people.Name="小白";


           DataContractJsonSerializerjson=newDataContractJsonSerializer(people.GetType());
           stringszJson="";
           //序列化
           using(MemoryStreamstream=newMemoryStream())
           {
               json.WriteObject(stream,people);
               szJson=Encoding.UTF8.GetString(stream.ToArray());
           }
           //反序列化
           using(MemoryStreamms=newMemoryStream(Encoding.UTF8.GetBytes(szJson)))
           {
               DataContractJsonSerializerserializer=newDataContractJsonSerializer(typeof(People));
               People_people=(People)serializer.ReadObject(ms);
           }
        }


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

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

复制代码代码如下:
[DataContract]
       publicclassPeople
       {
           [DataMember(Name="id")]
           publicintId{get;set;}
           [IgnoreDataMember]
           publicstringName{get;set;}
       }

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