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. idea正则替换

    将非 (股权)的替换成 股权

  2. 线程基础知识17 Quene

    1 ConcurrentLinkedQueue 1.1 简介 它是一个基于链接节点的无界线程安全队列.此队列按照 FIFO(先进先出)原则对元素进行排序. 新的元素插入到队列的尾部,队列获取操作从队列 ...

  3. icofx把图片转为ico图标、icofx 教程

    免费的图标编辑工具 icofx的介绍 IcoFX 是一款免费的图标编辑工具,让您轻松创建 Windows XP 和 Windows Vista 图标.在编辑区您可以轻松的预览.保存.更改您的图标.您可 ...

  4. SQL笔试真题练习

    一.现有以下两张表: 第一张表名为cust,其表结构如下: 字段名 字段说明 是否主键 Studentno 学号,数据类型为整型的 是 Name 学生名字,数据类型为字符串型的 否 Address 学 ...

  5. Portainer功能使用之容器管理

    下载镜像 点击左边功能菜单栏[images]下载镜像 容器管理 点击左边功能菜单栏[Containers]创建.启动.重启.停止.监控等功能 创建容器 例如:安装nginx代理服务器,并设置容器信息( ...

  6. 《价值流动-Project To Product》读后感

    背景:2022年8月,在这家公司已经任职满两年.这两年我最大的成就就是基于Scrum模式推行了敏捷项目管理,并取得了一定的成果.但是,在推行了两年后新的问题也产生了.例如: 1,项目管理上,项目经理缺 ...

  7. 有趣的python库-moviepy

    moviepy-视频处理 安装: pip install moviepy 基本使用: from moviepy.video.compositing.CompositeVideoClip import ...

  8. 【雅礼联考DAY02】Revolution

    #include<cstdio> #include<queue> using namespace std; const int N = 210 , M = 210000 , I ...

  9. [NOIP2018 提高组] 保卫王国

    题解 两只 \(\log\) 的动态 \(dp\) ! 相比标算倍增 动态 \(dp\) 既实用又好理解 \(Code\) #include<cstdio> #include<ios ...

  10. EULAR2021_推文_大多数免疫抑制剂对辉瑞新冠疫苗效果影响小

    尤其令人开心的是TNF抑制剂和抗IL-17!但是,糖皮质激素.利妥昔单抗.吗替麦考酚酯(MMF).阿巴西普(抑制T淋巴细胞激活)会明显降低疫苗接种效果.链接:http://note.youdao.co ...