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

所属分类: 软件编程 / C#教程 阅读数: 65
收藏 0 赞 0 分享
开始用的.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
更多精彩内容其他人还在看

WPF仿三星手机充电界面实现代码

这篇文章主要为大家详细介绍了WPF仿三星手机充电界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

浅谈C#各种数组直接的数据复制/转换

下面小编就为大家带来一篇浅谈C#各种数组直接的数据复制/转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

C#访问SQLServer增删改查代码实例

这篇文章主要为大家详细介绍了C#访问SQLServer增删改查代码实例,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#根据身份证号码判断出生日期和性别

这篇文章主要为大家详细介绍了C#根据身份证号码判断出生日期和性别的方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C# 向Word中设置/更改文本方向的方法(两种)

在一般情况下word中输入的文字都是横向的,今天小编给大家带来两种方法来设置更改文本方向的方法,非常不错,对c# word 更改文本方向的知识感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

让C# Excel导入导出 支持不同版本Office

让C# Excel导入导出,支持不同版本的Office,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#设置自定义文件图标实现双击启动(修改注册表)

这篇文章介绍的是利用C#设置自定义文件图标,然后实现双击启动的功能,文章给出了示例代码,介绍的很详细,有需要的可以参考借鉴。
收藏 0 赞 0 分享

C#两个相同属性的类赋值方法

这篇文章主要介绍了C#两个相同属性的类赋值方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

C#中ListView控件实现窗体代码

这篇文章主要介绍了C#中ListView控件实现窗体的核心代码,非常不错,具有参考借鉴价值,对c#listview相关知识感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

浅谈C# 序列化与反序列化几种格式的转换

下面小编就为大家带来一篇浅谈C# 序列化与反序列化几种格式的转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多