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-序列化的更多相关文章

  1. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  2. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  3. WPF控件深拷贝:序列化/反序列化

    原文:WPF控件深拷贝:序列化/反序列化 今天DebugLZQ在做WPF拖动总结的时候,遇到了这个问题.baidu了下,貌似没有解决这个问题的权威答案,遂写下这篇博文. 我想做的事情是:拖动一个窗体内 ...

  4. (WPF) MVVM: ComboBox Binding, XML 序列化

    基本思路还是在View的Xmal里面绑定ViewModel的属性,虽然在View的后台代码中也可以实现binding,但是还是在Xmal里面相对的代码量要少一些. 此例子要实现的效果就是将一个List ...

  5. WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据

    XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  6. [WPF]xml序列化以及反序列化数据

    代码 XML序列化工具类 public static class XMLHelper { /// <summary> /// 将对象序列化为指定的文件名 /// </summary& ...

  7. C# WPF xml序列化 反序列化

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  8. WPF - 属性系统 (3 of 4)

    依赖项属性元数据 在前面的章节中,我们已经介绍了WPF依赖项属性元数据中的两个组成:CoerceValueCallback回调以及PropertyChangedCallback.而在本节中,我们将对其 ...

  9. 【WPF】运用MEF实现窗口的动态扩展

    若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...

  10. Silverlight和WPF中DataContractJsonSerializer对时间的处理差异

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com Silverlight脱胎于WPF,他们的行为不完全并不完全相同,DataContractJsonSerializ ...

随机推荐

  1. 万字详解,吃透 MongoDB!

    本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识.) 少部分内容参考了 MongoDB 官方文档的描述,在此说明一下. MongoDB ...

  2. 基于Docker安装的Stable Diffusion使用CPU进行AI绘画

    基于Docker安装的Stable Diffusion使用CPU进行AI绘画 由于博主的电脑是为了敲代码考虑买的,所以专门买的高U低显,i9配核显,用Stable Diffusion进行AI绘画的话倒 ...

  3. 电商网站Web自动化测试实战( 编写京东搜索脚本python+selenium框架)

    电商网站Web自动化测试实战( 编写京东搜索脚本) 1,打开京东页 京东首页地址:https://www.jd.com/,故进入京东首页如下: 2,打开浏览器开发者模式 定位元素前需先打开浏览器开发者 ...

  4. 项目与自身毕设对比整理规划6 330 done

    3.30 没用呢- - 功夫不负有心人啊啊啊啊啊啊啊啊啊啊啊啊啊啊 成功了- - 但是很可恶 需要把数据返回然后放在那个文件里面才可以 现在就是问题就是返回数据的时候需要把这个文件存成数据接口 fin ...

  5. h5与原生app通信的各种功能

    import config from '@/config/index'; import cubeModule from '_public/CubeModule.json'; const _MIDEA_ ...

  6. ArcGIS Pro SDK 003 如何调用Toolbox

    1.如何调用普通的Tool ArcGIS中的Toolbox非常强大,做二次开发的时候,必不可少的会调用,在ArcObjects SDK中,每个Tool都会有自定义的类对应,例如栅格转矢量数据,定义在E ...

  7. 钓鱼攻击之:CHM电子书钓鱼

    钓鱼攻击之:CHM电子书钓鱼 目录 钓鱼攻击之:CHM电子书钓鱼 1 CHM简介 2 .Chm文件因何变得危险 3 CHM 后门的优点 4 利用过程 4.1 准备工具 4.2 制作恶意chm文件 4. ...

  8. Yapi安装配置(CentOs)

    环境要求 nodejs(7.6+) mongodb(2.6+) git 准备工作 清除yum命令缓存 sudo yum clean all 卸载低版本nodejs yum remove nodejs ...

  9. Apinto 网关 V0.11.1 版本发布,多协议互转,新增编码转换器,接入 Prometheus...

    憋了那么久,Eolink 旗下 Apinto 开源网关再次更新啦~ 一起来看看是否有你期待的功能! 1.协议转换功能上线 之前发布的 Apinto v0.10.0 已经支持了多协议的基本功能,实现多协 ...

  10. 有趣的drop-shadow

    如果写了好几个阴影,filter: drop-shadow(-0.5vmin 6vmin 0 var(--s2)) drop-shadow(-4.5vmin 10vmin 0 var(--v3));将 ...