c#数据的序列化和反序列化(推荐版)
程序员文章站
2023-08-17 11:58:55
开始用的.net 自带的datacontractjsonserializer进行序列化和反序列化,当代码写完以后,调试,我x(原谅我的脏话,因为确实让我生气),实体因为有[...
开始用的.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
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
上一篇: 一个模仿oso的php论坛程序源码(之三)第1/2页
下一篇: 雪糕怎样做,试着做一做解解馋吧!
推荐阅读
-
C#实现的json序列化和反序列化代码实例
-
关于WCF数据契约和序列化的疑惑
-
c#数据的序列化和反序列化(推荐版)
-
Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全
-
C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比
-
详解 C# 中XML对象的序列化和反序列化
-
JS对象序列化成json数据和json数据转化为JS对象的代码
-
解析网站处理数据交换时的序列化和反序列化
-
二进制数据的序列化反序列化和Json的序列化反序列化的重要区别
-
c#数据的序列化和反序列化(推荐版)