在.NET使用JSON作为数据交换格式实例演示
2024-07-10 12:46:01
供稿:网友
我们知道在NET中我们有多种对象序列化的方式,如XML方式序列化、Binary序列化,其中XML序列化是一种比较通用的在各语言之间传递数据的方式。除了这两种序列化方式之外,在NET中还可以使用JSON序列化。
JSON(JavaScript Object Notation)是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。在NET中有三种常用的JSON序列化的类,分别是 SystemWebScriptSerializationJavaScriptSerializer类、SystemRuntimeSerializationJsonDataContractJsonSerializer类和NewtonsoftJsonJsonConvert类。
为了便于下面的演示,下面提供一个类的代码:
代码如下:
[DataContract]
publicclass User
{
///<summary>
/// 编号
///</summary>
[DataMember]
publicint UserId { get; set; }
///<summary>
/// 用户名
///</summary>
[DataMember]
publicstring UserName { get; set; }
///<summary>
/// 创建时间
///</summary>
[DataMember]
[JsonConverter(typeof(IsoDateTimeConverter))]
public DateTime CreateDate { get; set; }
///<summary>
/// 生日
///</summary>
[DataMember]
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime Birthday { get; set; }
///<summary>
/// 相关URL
///</summary>
[DataMember]
public List<string> Urls { get; set; }
///<summary>
/// 薪水
///</summary>
//[ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段
//[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段
//[JsonIgnore]//使用JsonConvert序列化时不序列化此字段
publicint Salary { get; set; }
///<summary>
/// 权利级别
///</summary>
[DataMember]
public Priority Priority { get; set; }
public User()
{
Urls =new List<string>();
}
}
///<summary>
/// 权利级别
///</summary>
publicenum Priority:byte
{
Lowest=0x1,
BelowNormal=0x2,
Normal=0x4,
AboveNormal=0x8,
Highest=0x16
}
使用SystemWebScriptSerializationJavaScriptSerializer类
SystemWebScriptSerializationJavaScriptSerializer类是NET类库中自带的一种JSON序列化实现,在NET Framework5及以后版本中可以使用这个类,这个类位于SystemWebExtensionsdll中,使用这个类是必须添加对这个dll的引用。
下面的代码是使用JavaScriptSerializer进行序列化和反序列化的例子:
代码如下:
publicstaticvoid JavaScriptSerializerDemo()
{
User user =new User { UserId =1, UserName ="李刚", CreateDate = DateTimeNowAddYears(-30),Birthday=DateTimeNowAddYears(-50), Priority = PriorityHighest, Salary =500000 };