关于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#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

SpringBoot中配置文件pom.xml的使用详解

《SpringBoot中配置文件pom.xml的使用详解》SpringBoot的pom.xml文件是Maven项目的核心配置文件,用于定义项目的依赖、插件、构建配置等信息,下面小编就来和大家详细介绍一... 目录1. 基本结构2. 关键部分详解2.1 <modelVersion>2.2 项目坐标2.3 <p

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.