c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)
前言
前段时间使用了net.json保存对象数据。添加完成后,测试发现300多实例数据保存加载json文件,速度比原方式(BinaryFormatter)慢。但是功能加上后也懒再删掉代码了,索性就采用两种方式。怎么说两种方式也比一种多不是?_
net.json详细介绍
1 测试之前需要引用Newtonsoft.Json.dll,可在官网下载最新安装包。本文写作时最新Version 10.0.3
测试类Student
[JsonObject(MemberSerialization.Fields)]
class Student
{
const int count = 1024;
public Student(int ID, string Name, int Age, string Sex)
{
this.ID = ID;
this.Name = Name;
this.Age = Age;
this.Sex = Sex;
buffer = new byte[count];
for (int i = 0; i < count; i++)
{
buffer[i] = (byte)i;
}
}
byte[] buffer;
int ID { get; set; }
string Name { get; set; }
int Age { get; set; }
string Sex { get; set; }
[JsonIgnore]
IntPtr hwnd;
[OnDeserialized]
private void SetValuesOnDeserialized(StreamingContext context)
{
string stringA = "I seem to be turned around!";
hwnd = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(stringA);
}
}
2 序列化对象默认情况下只有公共成员,此类没有公共成员。故设置特性[JsonObject(MemberSerialization.Fields)]可序列化所有成员。详细可见MemberSerialization
3 对于Intprt hwnd,标记为[JsonIgnore]表示不进行序列化;当进行反序列化后使用[OnDeserialized]可根据需要重新对其进行赋值 OnDeserializedAttribute 类,对于自定义序列化可参考msdn自定义序列化
测试用例
ArrayList StuModel = new ArrayList()
{
new Student(1,"王小二",18,"男"),
new Student(2,"丽丽",16,"女")
};
using (StreamWriter file = File.CreateText(@"test.json"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, StuModel);
}
using (StreamReader file = File.OpenText(@"test.json"))
{
JsonSerializer serializer = new JsonSerializer();
var movie2 = (ArrayList)serializer.Deserialize(file, typeof(ArrayList));
for (int i = 0; i < movie2.Count; i++)
{
movie2[i] = JsonConvert.DeserializeObject<Student>(movie2[i].ToString());
}
}
4 测试代码中集合用ArrayList,故反序列化后需要再次进行转换,把集合里面的每个JObject转换成Student,如果使用List就不需要,如下:
List<Student> StuModel = new List<Student>()
{
new Student(1,"王小二",18,"男"),
new Student(2,"丽丽",16,"女")
};
using (StreamWriter file = File.CreateText(@"test.json"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, StuModel);
}
using (StreamReader file = File.OpenText(@"test.json"))
{
JsonSerializer serializer = new JsonSerializer();
var movie2 = (List<Student>)serializer.Deserialize(file, typeof(List<Student>));
}
c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)的更多相关文章
- c# Equal函数 and 运算符'==' (原发布 csdn 2017年10月15日 20:39:26)
1.==.!=.<.>.<= 和>= 运算符为比较运算符(comparison operator).C#语言规范5.0中文版中比较运算符的描述如下: 2.通用类型系统 3.值类 ...
- IEEE浮点表示 (原发布 csdn 2018-10-14 10:29:33)
目录 观察IEEE浮点表示 工作中遇到过整型转浮点型(union那种转换),碰到就看下书,过后就遗忘了.等过段时间又出现此现象,又重新拿起书本,这次记录了过程.然而一直等到今天才写出来,以防以后还用到 ...
- 关于“关于C#装箱的疑问”帖子的个人看法 (原发布csdn 2017年10月07日 10:21:10)
前言 昨天晚上闲着无事,就上csdn逛了一下,突然发现一个帖子很有意思,就点进去看了一下. 问题很精辟 int a = 1; object b=a; object c = b; c = 2; 为什么b ...
- java使用类序列化反序列化(读写文件)
创建类:Role package com.wbg.springRedis.entity; import java.io.Serializable; public class Role implemen ...
- c#如何序列化与反序列化json文件
见网站: http://www.json.org/ 代码如下: /* * Copyright (c) 2013 Calvin Rien * * Based on the JSON parser by ...
- wpf 单例模式和异常处理 (原发布 csdn 2017-04-12 20:34:12)
第一次写博客,如有错误,请大家及时告知,本人立即改之. 如果您有好的想法或者建议,我随时与我联系. 如果发现代码有误导时,请与我联系,我立即改之. 好了不多说,直接贴代码. 一般的错误,使用下面三个就 ...
- WPF DispatcherTimer一些个人看法 (原发布 csdn 2017-04-25 19:12:22)
wpf中的DispatcherTimer基本用法,本文不在叙述.主要写一些不同的,来提醒自己不要再犯同样错误. 前几天写代码时发现.当在非UI线程创建DispatcherTimer实例时,程序无法进入 ...
- WPF DataGrid显示MySQL查询信息,且可删除、修改、插入 (原发布 csdn 2018-10-13 20:07:28)
1.入行好几年了,工作中使用数据库几率很小(传统行业).借着十一假期回家机会,学习下数据库. 2.初次了解数据库相关知识,如果本文有误,还望告知. 3.本文主要目的,记录下wpf界面显示数据库信息,且 ...
- WPF 启动页面 (原发布 csdn 2017-06-26 19:26:01)
如果我写的有误,请及时与我联系,我立即改之以免继续误导他/她人. 如果您有好的想法或者建议,请随时与我联系. wpf软件启动时,加载启动页面.软件初始化完成之后关闭页面. App.xaml.cs代码 ...
随机推荐
- Scrum 冲刺第三篇
是我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1 27号站立式会议照片: 1.2 昨天已完成的事情 团队成员 今天计划完成的任务 黄思扬 活动平台首页(前端) ...
- Mysql时区无法识别
Unable to connect to database. Tried 1 times {:error_message=>“Java::JavaSql::SQLException: The s ...
- 网络编程ssh,粘包
1.什么是socket? TCP,可靠地,面向连接协议,有阻塞rect udp,不可靠的,无线连接的服务 这里因为不需要阻塞,所以速度会很快,但安全性不高 2.关于客户端退出而服务器未退出的解决办法 ...
- vue-router路由传参之query和params
首先简单来说明一下$router和$route的区别 //$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象 //操作 路由跳转 this.$router.pu ...
- python 登录并获取session,使用session新增ecshop的草稿
,"consignee":"冬天","email":"12345@qq.com","address" ...
- python27期day17:re、logging日志模块、作业。
1.re: 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 re 模 ...
- 图学Kubernetes
所有图片来自:Kubernetes Patterns: Reusable Elements for Designing Cloud-Native Applications 本文图片摘要曾经在某大厂内网 ...
- window.open()与window.showModuleDialog()
一.window.showModalDialog() 模态对话框. (只支持IE浏览器)window.showModelessDialog() 非模态对话框. 基本语法:vReturnVa ...
- Excel-查找函数
1.VLOOKUP函数 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 多表关联查询---vlooku ...
- 【转】web.xml详解
转载:https://www.cnblogs.com/vanl/p/5737656.html. 一:web.xml加载过程 简单说一下,web.xml的加载过程.当我们启动一个WEB项目容器时,容器包 ...