关于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#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr