c#数据的序列化和反序列化(推荐版)

 详细出处参考:http://www.jb51.net/article/28295.htm

今天项目中用到了数据的序列化和反序列化,数据用的是EF自动生成的代码开始用的.net 自带的DataContractJsonSerializer进行序列化和反序列化,当代码写完以后,调试,我X(原谅我的脏话,因为确实让我生气),实体因为有[DataContractAttribute(IsReference=true )] 这样一个属性,提示不能序列化,当然手改一下啦,改完以后,提示基类EntityObject 的这个属性不可以 MY God!! 
后来也是因为DataContractJsonSerializer 反序列化成集合的时候不好使,所以才下定决心废弃。采用了第三方的东西:传说中的Json.net 
今天我也是要说这个组件序列化和反序列化的功能: 
废话少说,线上model ,作为提供数据的使用 

这里主要是作为测试时的数据源 

public class wf_Task_Inbox 
{ 
	public wf_Task_Inbox(string id,string name) 
	{ 
		this.ID = id; 
		this.Name = name; 
	} 

	[DataMember ] 
	public string ID { get; set; } 

	[DataMember] 
	public string Name{get ;set ;} 
} 


一、序列化

接下来是序列化的代码,为了对比清楚,先奉上.net 自带的方法: 
/// <summary> 
/// 把一个对象转化为json格式数据 
/// </summary> 
/// <param name="entity"></param> 
/// <returns></returns> 
public string EntityToJson(wf_Task_Inbox entity) 
{ 
	DataContractJsonSerializer serializer = newDataContractJsonSerializer(entity.GetType()); 
	using (MemoryStream stream = new MemoryStream()) 
	{ 
		serializer.WriteObject(stream, entity); 
		return Encoding.UTF8.GetString(stream .ToArray ()); 
	} 
} 
返回的是个字符串,集合序列化的方法类似; 

下边是json.net的代码: 
JsonConvert .SerializeObject (list, Formatting.None ); 
有且只有一行!!!!当然首先得添加json.net的引用 

二、反序列化
接下是反序列化的代码,.net 自带: 

/// <summary> 
/// 将json 数据转化为对象 
/// </summary> 
/// <param name="entity"></param> 
/// <param name="jsonstring"></param> 
/// <returns></returns> 
public wf_Task_Inbox JsonToEntity(string jsonstring) 
{ 
	DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(wf_Task_Inbox)); 
	using (MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonstring))) 
	{ 
		return serializer.ReadObject(mStream) as wf_Task_Inbox; 
	} 
} 

同时也是因为自带的木有泛型的扩展,所以不太喜欢。

json.net的方法: 

JsonConvert.DeserializeObject<List<wf_Task_Inbox>>(jsonstring) ;
这个是集合的,当然单个对象的怎么弄,你懂的,去掉《T》 就行了呗.... 

生成的序列化数据是标准的json格式: 
[{"ID":"0","Name":"姓名:0"},{"ID":"1","Name":"姓名:1"},{"ID":"2","Name":"姓名:2"},{"ID":"3","Name":"姓名:3"},{"ID":"4","Name":"姓名:4"},{"ID":"5","Name":"姓名:5"},{"ID":"6","Name":"姓名:6"},{"ID":"7","Name":"姓名:7"},{"ID":"8","Name":"姓名:8"},{"ID":"9","Name":"姓名:9"}] 

最后附上json.net的下载地址,下载包里有帮助和各个版本的json.net 
http://json.codeplex.com/Release/ProjectReleases.aspx 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值