前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c# 对序列化类XMLSerializer 二次封装泛型化方便了一些使用的步骤

c# 对序列化类XMLSerializer 二次封装泛型化方便了一些使用的步骤

作者头像
徐飞机
发布2023-03-31 12:47:04
2580
发布2023-03-31 12:47:04
举报

原文作者:aircraft

  原文链接:https://cloud.tencent.com/developer/article/2255193

加工的泛型类如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;

namespace Data
{
    public class XMLSerializer<T>
    {

        public static bool Save(T obj, string flieName)
        {
            string dir = Path.GetDirectoryName(flieName);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);
            try
            {
                if (flieName.Trim().Length == 0)
                    return false;
                string strFolder = Path.GetDirectoryName(flieName);

                XmlSerializer xs = new XmlSerializer(typeof(T));
                using (FileStream fs = new FileStream(flieName, FileMode.Create))
                {
                    xs.Serialize(fs, obj);
                    //fs.Close ();
                }
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("序列化保存时出错,出错原因为:" + ex.ToString());
                return false;
            }
        }

        public static T Load(string fileName)
        {
            if (File.Exists(fileName) == false)
            {
                return default(T);
            }

            T obj = default(T);
            try
            {
                XmlSerializer xml = new XmlSerializer(typeof(T));
                
                using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    obj = (T)xml.Deserialize(fs);
                    //fs.Close ();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("序列化读取时出错,出错原因为:" + ex.ToString());
                return default(T);
            }
            return obj;
        }

        public static T Clone(T target)
        {
            T obj = default (T);
            try
            {
                MemoryStream ms = new MemoryStream ();
                XmlSerializer xml = new XmlSerializer (typeof (T));
                xml.Serialize (ms, target);
                ms.Seek (0, SeekOrigin.Begin);
                obj = (T)xml.Deserialize (ms);
            }
            catch (Exception ex)
            {
                MessageBox.Show ("拷贝时出错,出错原因为:" + ex.ToString ());
                return default (T);
            }
            return obj;
        }
    }
}

例如我们有个简单的类

代码语言:javascript
复制
 class Apply
    {
        [CategoryAttribute("基本参数"), DisplayName("片数")]
        public int WaferNum { get; set; } = 25;
        [CategoryAttribute("基本参数"), DisplayName("文件原路径")]
        public string OriFilePath { get; set; } = "D:\\Data";

    }

需要去导入,保存,深拷贝复制,我们就可以这样调用

代码语言:javascript
复制
Apply apply = new Apply();

XMLSerializer<Apply>.Save(apply , "D:\\Appply.xml");



Apply apply = XMLSerializer<Apply>.Load( "D:\\Appply.xml");


//也可以作为类的复制快捷方式来使用--例如下面类这样
class App
        {

            int a = 0;

            public App Clone()
            {
                App a;
                a = XMLSerializer<App>.Clone(this);
                return a;
            }


        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档