WPF-序列化
public class SerializeHelper
{
#region 二进制格式
/// <summary>
/// Binary 序列化使用前需要标记类可序列化
/// </summary>
/// <param name="fileName">序列化到指定的文件</param>
/// <param name="obj">需要序列化的类</param>
public static void BinarySerializer<T>(T obj, string fileName) where T : class
{
using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
try
{
if (!Directory.GetParent(fileName).Exists)
{
Directory.GetParent(fileName).Create();
}
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
binFormat.Serialize(fStream, obj);
fStream.Close();
}
catch (Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("二进制文件序列化错误: " + ex.ToString(), Color.Red, "Main");
}
}
}
/// <summary>
/// Binary 反序列化使用前需要标记类可序列化
/// </summary>
/// <param name="filePath">从指定的文件序列化成相应对象</param>
/// <returns>反序列化后的类对象通过泛型限定</returns>
public static T BinaryDeserializer<T>(string fileName)
{
T obj = default(T);
if (System.IO.File.Exists(fileName))//检查文件是否存在
{
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
try
{
fs.Position = 0;
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
obj = (T)binFormat.Deserialize(fs);
fs.Close();
return obj;
}
catch (System.Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("二进制文件反序列化错误:" + ex.ToString(), Color.Red,"Main");
MessageBox.Show("二进制文件反序列化错误:" + fileName + ex.ToString(),"Main");
}
}
}
return obj;
}
#endregion
#region Json 格式
/// <summary>
/// 反序列化json文件
/// </summary>
/// <param name="fileName"></param>
/// <returns>反序列化后的类对象通过泛型限定</returns>
public static T DeserializeJson<T>(string fileName)
{
T obj = default(T);
try
{
if (!File.Exists(fileName)) return obj;
return JsonConvert.DeserializeObject<T>(File.ReadAllText(fileName));
}
catch (Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("Json文件序列化错误: " + ex.ToString(), Color.Red, "Main");
}
return obj;
}
/// <summary>
/// 序列化json文件
/// </summary>
/// <typeparam name="T">序列化限定的泛型</typeparam>
/// <param name="fileName">文件路径</param>
public static void SerializeJson<T>(T obj, string fileName) where T : class
{
try
{
string dir = fileName.Substring(0, fileName.LastIndexOf('\\'));
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var json = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented, jsonSetting);
File.WriteAllText(fileName, json);
}
catch (Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("Json文件反序列化错误: " + ex.ToString(), Color.Red, "Main");
}
}
#endregion
#region XML格式
/// <summary>
///
///《/summary>
/// <typeparam name="T">限定的泛型类型</typeparam>
/// <param name="fileName">文件路径</param>
/// <param name="obj">序列化的对象</param>
/// <param name="omitXmlDeclaration">是否需要xml版本描述</param>
/// <param name="removeDefaultNameSpace">是否从新开始添加</param>
public static void XmlSerialize<T>(string fileName, T obj, bool omitXmlDeclaration, bool removeDefaultNameSpace)
{
try
{
XmlWriterSettings xmlSetting = new XmlWriterSettings();
xmlSetting.OmitXmlDeclaration = omitXmlDeclaration;
xmlSetting.Indent = true;
xmlSetting.Encoding = new UTF8Encoding(false);
xmlSetting.NewLineChars = Environment.NewLine;
using (XmlWriter xmlWriter = XmlWriter.Create(fileName, xmlSetting))
{
XmlSerializerNamespaces xmlms = new XmlSerializerNamespaces();
if (removeDefaultNameSpace)
{
xmlms.Add(string.Empty, string.Empty);
}
XmlSerializer ser = new XmlSerializer(typeof(T));
ser.Serialize(xmlWriter, obj, xmlms);
}
}
catch (Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("XML文件序列化错误: " + ex.ToString(), Color.Red, "Main");
}
}
/// <summary>
/// xml反序列化
/// </summary>
/// <typeparam name="T">限定的泛型类型</typeparam>
/// <param name="fileName">文件路径</param>
/// <returns>返回限定的泛型类</returns>
public static T XmlDeserialize<T>(string fileName) where T : class
{
try
{
XmlReaderSettings xmlReaderSetting = new XmlReaderSettings();
xmlReaderSetting.CloseInput = true;
using (XmlReader xmlReader = XmlReader.Create(fileName, xmlReaderSetting))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
return (T)xmlSerializer.Deserialize(xmlReader);
}
}
catch (Exception ex)
{
//HelperEvent.OnMessageColor?.Invoke("XML文件反序列化错误: " + ex.ToString(), Color.Red, "Main");
return null;
}
}
#endregion
}
对象序列化需要在类上面加上[Serializable]

调用:path是程序的exe目录,data是序列化文件的

WPF-序列化的更多相关文章
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- WPF控件深拷贝:序列化/反序列化
原文:WPF控件深拷贝:序列化/反序列化 今天DebugLZQ在做WPF拖动总结的时候,遇到了这个问题.baidu了下,貌似没有解决这个问题的权威答案,遂写下这篇博文. 我想做的事情是:拖动一个窗体内 ...
- (WPF) MVVM: ComboBox Binding, XML 序列化
基本思路还是在View的Xmal里面绑定ViewModel的属性,虽然在View的后台代码中也可以实现binding,但是还是在Xmal里面相对的代码量要少一些. 此例子要实现的效果就是将一个List ...
- WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据
XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- [WPF]xml序列化以及反序列化数据
代码 XML序列化工具类 public static class XMLHelper { /// <summary> /// 将对象序列化为指定的文件名 /// </summary& ...
- C# WPF xml序列化 反序列化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- WPF - 属性系统 (3 of 4)
依赖项属性元数据 在前面的章节中,我们已经介绍了WPF依赖项属性元数据中的两个组成:CoerceValueCallback回调以及PropertyChangedCallback.而在本节中,我们将对其 ...
- 【WPF】运用MEF实现窗口的动态扩展
若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...
- Silverlight和WPF中DataContractJsonSerializer对时间的处理差异
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com Silverlight脱胎于WPF,他们的行为不完全并不完全相同,DataContractJsonSerializ ...
随机推荐
- SQLSERVER 事务日志的 LSN 到底是什么?
一:背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 ...
- Django-Ajax、form组件
1.Ajax 1.AJAX:不是新的编程语言,而是一种使用现有标准的新方法,我们目前学习的是jQuery版本.特点:异步提交,局部刷新. 2.AJAX 最大的优点是在不重新加载整个页面的情况下,可以与 ...
- spring-in-action-day05-REST
1.创建RESTFUL端点 (1)创建get端点 (2)创建post端点 (3)创建put/patch端点 (4)创建delete端点 2.启用超媒体 3.消费REST端点 3.1使用RestTemp ...
- JAVA虚拟机22-原子性、可见性与有序性、先行发生原则
1 简介 Java内存模型是围绕着在并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,我们逐个来看一下哪些操作实现了这三个特性 2 原子性 2.1 操作指令 由Java内存模型来直接保证 ...
- [代码审计基础 03]-RCE-fork,system,execve
RCE-fork,system,execve 简单来讲: 数据流进入了控制流 紧紧抓住输入 不同数据层的交汇处,往往是漏洞点 远程代码执行 PHP eval() assert() preg_reple ...
- JZOJ 4276【NOIP2015模拟10.28A组】递推
[NOIP2015模拟10.28A组]递推 思路一 对于 \(30%\) 的数据,由于 \(n\) 和 \(x_i\) 都比较小,所以依题暴力枚举每个整点的坐标算贡献即可 思路二 对于额外 \(20% ...
- [IOI2013]robots 机器人
题目传送门 思路 简单题,设函数 \(f_i\) 表示当时间为 \(i\) 时是否能够收拾好所有玩具,则 \(f_i\) 显然是单调的. 所以我们可以考虑二分. 设我们当前二分到 \(x\),我们先把 ...
- Bypass disable_functions 食用方法
Bypass disable_functions 食用方法 目录 Bypass disable_functions 食用方法 1 上传Payload 2 直接使用sh反弹shell 3 上传 Payl ...
- Mybatis连接数据库
从零开始Mybatis连接数据库 创建Maven文件 File-->new-->project-->maven,点击next 配置 在出现的pom.xml文件中<project ...
- Sonarqube安装(Docker)
一,拉取相关镜像并运行 # 拉取sonarqube镜像 docker pull sonarqube:9.1.0-community 在运行之前要提前安装postgres并允许,新建数据库名为sonar ...