news 2026/4/16 12:20:34

C#之XML文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#之XML文件操作

C#之XML文件操作

一 XMLHelper

usingSystem;usingSystem.Globalization;usingSystem.IO;usingSystem.IO.Compression;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;namespaceHelper{publicclassXMLHelper{publicstaticXmlNodeCreate(stringnodeName){vardoc=newXmlDocument();XmlNodenode=doc.CreateElement(nodeName);returnnode;}publicstaticXmlAttributeCreateAttribute(XmlNodenode,stringattributeName,stringvalue){try{XmlDocumentdoc=node.OwnerDocument;XmlAttributeattr=doc.CreateAttribute(attributeName);attr.Value=value;node.Attributes.SetNamedItem(attr);returnattr;}catch(Exceptionerr){stringdesc=err.Message;returnnull;}}publicstaticXmlNodeObjectToXML(objectconfig){varxnd=newXmlDocument();if(config!=null){//we need the type to serializeTypet=config.GetType();varser=newXmlSerializer(t);//will hold the xmlusing(varwriter=newStringWriter(CultureInfo.InvariantCulture)){ser.Serialize(writer,config);xnd.LoadXml(writer.ToString());writer.Close();}}returnxnd.DocumentElement;}publicstaticobjectXMLToObject(XmlNodenode,TypeobjectType){objectconvertedObject=null;if(node!=null){using(varreader=newStringReader(node.OuterXml)){varser=newXmlSerializer(objectType);convertedObject=ser.Deserialize(reader);reader.Close();}}returnconvertedObject;}}publicclassXmlSerializerHelper{/// <summary>/// 读取XML文件/// </summary>/// <param name="XmlFilePath"></param>/// <param name="type"></param>/// <returns></returns>publicstaticobjectReadXML(stringXmlFilePath,Typetype){if(!File.Exists(XmlFilePath)){thrownewException($"File{XmlFilePath}not Exists");}using(varfs=newFileStream(XmlFilePath,FileMode.Open)){returnnewXmlSerializer(type).Deserialize(fs);}}/// <summary>/// 序列化XML文件/// </summary>/// <param name="data"></param>/// <param name="file"></param>/// <param name="type"></param>/// <returns></returns>publicstaticboolWriteXML(objectdata,stringfile,Typetype){using(varfs=newFileStream(file,FileMode.Create)){newXmlSerializer(type).Serialize(fs,data);}returntrue;}publicstaticstringXMLSerialize<T>(Tentity){varbuffer=newStringBuilder();varserializer=newXmlSerializer(typeof(T));using(TextWriterwriter=newStringWriter(buffer)){serializer.Serialize(writer,entity);}returnbuffer.ToString();}publicstaticstringByteToString(byte[]data){returnEncoding.Default.GetString(data);}publicstaticbyte[]StringToByte(stringvalue){returnEncoding.Default.GetBytes(value);}publicstaticTDeXMLSerialize<T>(stringxmlString){TcloneObject=default(T);varbuffer=newStringBuilder();buffer.Append(xmlString);varserializer=newXmlSerializer(typeof(T));using(TextReaderreader=newStringReader(buffer.ToString())){Objectobj=serializer.Deserialize(reader);cloneObject=(T)obj;}returncloneObject;}/// <summary>/// 把对象序列化为字符串/// </summary>/// <param name="pObj"></param>/// <returns></returns>publicstaticbyte[]SerializeObject(objectpObj){if(pObj==null)returnnull;var_memory=newMemoryStream();varformatter=newBinaryFormatter();formatter.Serialize(_memory,pObj);_memory.Position=0;varread=newbyte[_memory.Length];_memory.Read(read,0,read.Length);_memory.Close();returnCompress(read);}/// <summary>/// 把字节反序列化成相应的对象/// </summary>/// <param name="pBytes">字节流</param>/// <returns>object</returns>publicstaticobjectDeserializeObject(byte[]pBytes){object_newOjb=null;if(pBytes==null)return_newOjb;var_memory=newMemoryStream(Decompress(pBytes));_memory.Position=0;varformatter=newBinaryFormatter();_newOjb=formatter.Deserialize(_memory);_memory.Close();return_newOjb;}/// <summary>/// Write byte[] to file/// </summary>publicstaticvoidWriteByteToFile(byte[]dataSource,stringfilePath){varfs=newFileStream(filePath,FileMode.Create);//将byte数组写入文件中fs.Write(dataSource,0,dataSource.Length);fs.Close();}/// <summary>/// Read byte from file/// </summary>/// <param name="filePath"></param>/// <returns></returns>publicstaticbyte[]ReadByteFromFile(stringfilePath){varfs=newFileStream(filePath,FileMode.Open);//获取文件大小longsize=fs.Length;vararray=newbyte[size];//将文件读到byte数组中fs.Read(array,0,array.Length);fs.Close();returnarray;}/// <summary>/// Write object to file/// </summary>publicstaticvoidWriteObjectToFile(objectdataSource,stringfilePath){varfs=newFileStream(filePath,FileMode.Create);byte[]arraysource=SerializeObject(dataSource);//将byte数组写入文件中fs.Write(arraysource,0,arraysource.Length);fs.Close();}/// <summary>/// Read object from file/// </summary>/// <param name="filePath"></param>/// <returns></returns>publicstaticobjectReadObjectFromFile(stringfilePath){varfs=newFileStream(filePath,FileMode.Open);//获取文件大小longsize=fs.Length;vararray=newbyte[size];//将文件读到byte数组中fs.Read(array,0,array.Length);fs.Close();returnDeserializeObject(array);}/// <summary>/// 字符串压缩/// </summary>/// <param name="strSource"></param>/// <returns></returns>publicstaticbyte[]Compress(byte[]data){try{varms=newMemoryStream();varzip=newGZipStream(ms,CompressionMode.Compress,true);zip.Write(data,0,data.Length);zip.Close();varbuffer=newbyte[ms.Length];ms.Position=0;ms.Read(buffer,0,buffer.Length);ms.Close();returnbuffer;}catch(Exceptione){thrownewException(e.Message);}}/// <summary>/// 字符串解压缩/// </summary>/// <param name="strSource"></param>/// <returns></returns>publicstaticbyte[]Decompress(byte[]data){try{varms=newMemoryStream(data);varzip=newGZipStream(ms,CompressionMode.Decompress,true);varmsreader=newMemoryStream();varbuffer=newbyte[0x1000];while(true){intreader=zip.Read(buffer,0,buffer.Length);if(reader<=0){break;}msreader.Write(buffer,0,reader);}zip.Close();ms.Close();msreader.Position=0;buffer=msreader.ToArray();msreader.Close();returnbuffer;}catch(Exceptione){thrownewException(e.Message);}}/// <summary>/// string 压缩/// </summary>/// <param name="str"></param>/// <returns></returns>publicstaticstringCompressString(stringstr){stringcompressString="";byte[]compressBeforeByte=Encoding.GetEncoding("UTF-8").GetBytes(str);byte[]compressAfterByte=Compress(compressBeforeByte);//compressString = Encoding.GetEncoding("UTF-8").GetString(compressAfterByte);compressString=Convert.ToBase64String(compressAfterByte);returncompressString;}/// <summary>/// string 解压缩/// </summary>/// <param name="str"></param>/// <returns></returns>publicstaticstringDecompressString(stringstr){stringcompressString="";//byte[] compressBeforeByte = Encoding.GetEncoding("UTF-8").GetBytes(str);byte[]compressBeforeByte=Convert.FromBase64String(str);byte[]compressAfterByte=Decompress(compressBeforeByte);compressString=Encoding.GetEncoding("UTF-8").GetString(compressAfterByte);returncompressString;}}}

二 DataModel

publicclassDataModel{[Category("算法参数"),Description("面积阈值")]publicdoubleArea{get;set;}=100;[Category("算法参数"),Description("宽阈值")]publicdoubleWidth{get;set;}=200;[Category("算法参数"),Description("高阈值")]publicdoubleHeight{get;set;}=300;}

三 保存XML文件

privatevoidbutton1_Click(objectsender,EventArgse){DataModeldataModel=newDataModel();dataModel.Area=101;dataModel.Width=202;dataModel.Height=303;XmlSerializerHelper.WriteXML(dataModel,@"D:\\DataModel.xml",typeof(DataModel));}

四 读取XML文件

privatevoidbutton2_Click(objectsender,EventArgse){DataModeldataModel=newDataModel();dataModel=XmlSerializerHelper.ReadXML("testXmlDataModel.xml",typeof(TestXmlDataModel))asTestXmlDataModel;Doubletest1=Convert.ToDouble(dataModel.Area);Doubletest2=Convert.ToDouble(dataModel.Width);Doubletest3=Convert.ToDouble(dataModel.Height);propertyGrid1.SelectedObject=dataModel;}

五 propertyGrid1

DataModeldataModel=newDataModel();dataModel=XmlSerializerHelper.ReadXML("testXmlDataModel.xml",typeof(TestXmlDataModel))asTestXmlDataModel;Doubletest1=Convert.ToDouble(dataModel.Area);Doubletest2=Convert.ToDouble(dataModel.Width);Doubletest3=Convert.ToDouble(dataModel.Height);propertyGrid1.SelectedObject=dataModel;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 3:37:32

JSP 生命周期

JSP 生命周期 概述 JSP(Java Server Pages)是一种基于Java技术的服务器端页面技术,用于创建动态网页和应用程序。JSP的生命周期是指从JSP页面被请求到被销毁的整个过程。理解JSP的生命周期对于开发高效的JSP应用程序至关重要。 JSP生命周期阶段 JSP的生命周期可以分为以…

作者头像 李华
网站建设 2026/4/3 13:54:02

【计算机毕业设计案例】基于springBoot的招考信息聚合、政策解读、备考资源、在线学习、岗位匹配高校毕业生公职资讯系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/15 2:10:12

PyTorch安装包离线安装教程:适用于无外网GPU服务器

PyTorch-CUDA 镜像&#xff1a;无外网环境下的高效深度学习部署方案 在企业级AI平台或科研计算集群中&#xff0c;一个常见的痛点浮出水面&#xff1a;如何在完全断网的GPU服务器上快速搭建可信赖的深度学习环境&#xff1f;传统依赖 pip install torch 的方式在此类场景下寸步…

作者头像 李华
网站建设 2026/4/16 10:16:48

Git stash暂存PyTorch实验代码变更

Git stash暂存PyTorch实验代码变更 在深度学习项目的日常开发中&#xff0c;你是否遇到过这样的场景&#xff1a;正在调试一个新模型结构&#xff0c;突然接到通知要紧急修复主分支上的 Bug&#xff1f;或者在 Jupyter Notebook 中反复修改辅助函数&#xff0c;却因为忘记保存而…

作者头像 李华
网站建设 2026/4/14 23:14:35

PyTorch安装教程GPU版:WSL2子系统配置指南

PyTorch GPU 环境搭建新范式&#xff1a;WSL2 下的开箱即用体验 你有没有经历过这样的场景&#xff1f;刚准备好复现一篇顶会论文&#xff0c;兴冲冲地打开终端准备跑代码&#xff0c;结果 torch.cuda.is_available() 却返回了 False。接着就是漫长的排查&#xff1a;CUDA 版本…

作者头像 李华
网站建设 2026/4/11 0:17:23

【毕业设计】基于Springboot的克州旅游网站的设计与实现旅游资源管理 文旅服务 (源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华