关于C#读写XML的公用类

2024-06-24 01:36
文章标签 c# xml 读写 .net netcore 公用

本文主要是介绍关于C#读写XML的公用类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

XmlHelper有很多种写法,以泛型的方式保存和读取xml,可以做到像下面这么简化又实用:

调用处 var sysParam = XmlHelper.LoadFromXML<TSysParam>(ApplicationDir.SystemParamFile);

 //无参数文件时,初始化系统参数到XML文件
 XmlHelper.SaveAsXML(ApplicationDir.SystemParamFile, param);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;namespace Infrastructure
{public static class XmlHelper{/// <summary>/// 读取以xml格式保存的对象,如果文件不存在则自动创建,触发相关代码/// </summary>/// <typeparam name="T">类型参数</typeparam>/// <param name="filename">文件路径</param>/// <returns></returns>public static T LoadFromXML<T>(string fileName, Action IfFileNotExist = null){T o = default(T);try{if (!File.Exists(fileName)){if (IfFileNotExist != null)IfFileNotExist.DynamicInvoke(fileName);SaveAsXML(fileName, Activator.CreateInstance<T>());}using (FileStream fs = File.OpenRead(fileName)){o = LoadFromXML<T>(fs);fs.Close();fs.Dispose();}}catch (Exception e){if (File.Exists(fileName)){//const string path = "配置备份";//if (!Directory.Exists(path))//    Directory.CreateDirectory(path);File.Copy(fileName,Path.Combine(Comm.AppDir, DateTime.Now.ToString("yyyy_MM_dd hh_mm_ss") + ".xml"), true);Comm.InfoMessage($"加载XML异常备份操作, 请查看文件{fileName}");}throw new Exception($"加载XML异常: {e.Message}: {e.StackTrace}");}return o;}/// <summary>/// 将对象以xml格式保存/// </summary>/// <param name="filename">文件路径</param>/// <param name="o">对象</param>public static bool SaveAsXML(string fileName, object o){try{using (FileStream fs = File.Create(fileName)){XmlSerializer sr = new XmlSerializer(o.GetType());XmlSerializerNamespaces ns = new XmlSerializerNamespaces();ns.Add(string.Empty, string.Empty); //去除根节点的名空间sr.Serialize(fs, o, ns);fs.Close();}return true;}catch (Exception e){throw new Exception($"保存XML异常: {e.Message} 堆栈信息: {e.StackTrace}");}}private static T LoadFromXML<T>(Stream stream){T o = default(T);XmlSerializer sr = new XmlSerializer(typeof(T));o = (T)sr.Deserialize(stream);return o;}              }
}

这篇关于关于C#读写XML的公用类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088831

相关文章

C#中checked关键字的使用小结

《C#中checked关键字的使用小结》本文主要介绍了C#中checked关键字的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录✅ 为什么需要checked? 问题:整数溢出是“静默China编程”的(默认)checked的三种用

C#中预处理器指令的使用小结

《C#中预处理器指令的使用小结》本文主要介绍了C#中预处理器指令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 第 1 名:#if/#else/#elif/#endif✅用途:条件编译(绝对最常用!) 典型场景: 示例

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el