首页 > 编程语言 >C# 类型增加自定义xml序列化

C# 类型增加自定义xml序列化

时间:2024-10-09 15:12:06浏览次数:7  
标签:xml WriteElementString 自定义 Read writer int result reader 序列化

1、首先类需要增加[Serializable]标识

2、类实现IXmlSerializable接口

下面是重写ReadXml和WriteXml方法

public void ReadXml(XmlReader reader)
{
    reader.ReadStartElement(reader.LocalName);
    while (reader.Read())
    {
        if (reader.Name == "TimeType" && reader.NodeType == XmlNodeType.EndElement)
        {
            return;
        }

        if (reader.NodeType != XmlNodeType.Element) continue;
        bool result;
        switch (reader.Name)
        {
            case "Year":
                result = reader.Read();
                if (result)
                {
                    m_year = int.Parse(reader.Value);
                }
                break;
            case "Mon":
                result = reader.Read();
                if (result)
                {
                    m_mon = int.Parse(reader.Value);
                }
                break;
            case "Day":
                result = reader.Read();
                if (result)
                {
                    m_day = int.Parse(reader.Value);
                }
                break;
            case "Hour":
                result = reader.Read();
                if (result)
                {
                    m_hour = int.Parse(reader.Value);
                }
                break;
            case "Min":
                result = reader.Read();
                if (result)
                {
                    m_min = int.Parse(reader.Value);
                }
                break;
            case "Second":
                result = reader.Read();
                if (result)
                {
                    m_sec = int.Parse(reader.Value);
                }
                break;
            case "Millisecond":
                result = reader.Read();
                if (result)
                {
                    m_milisec = int.Parse(reader.Value);
                }
                break;
            case "Nanosecond":
                result = reader.Read();
                if (result)
                {
                    m_nanosec = int.Parse(reader.Value);
                }
                break;
        }
    }
}

public void WriteXml(XmlWriter writer)
{
    writer.WriteStartElement("TimeType");
    writer.WriteElementString("Year", Year.ToString());
    writer.WriteElementString("Mon", Month.ToString());
    writer.WriteElementString("Day", Day.ToString());
    writer.WriteElementString("Hour", Hour.ToString());
    writer.WriteElementString("Min", Minute.ToString());
    writer.WriteElementString("Second", Second.ToString());
    writer.WriteElementString("Millisecond", Millisecond.ToString());
    writer.WriteElementString("Nanosecond", Nanosecond.ToString());
    writer.WriteEndElement();
}

 

标签:xml,WriteElementString,自定义,Read,writer,int,result,reader,序列化
From: https://www.cnblogs.com/log9527blog/p/18454256

相关文章

  • SkyWalking组件自定义链路追踪
    SkyWalking组件通过添加相关配置就可以获取到接口的相关信息,更加方便的追踪和处理问题接下去讲下步骤:1、在service层添加两个注解;@Trace@Tags({@Tag(key="getDataByCode",value="returnedObj"),@Tag(key="getDataByCode",value="arg[0]")})......
  • 自定义tomcat的服务器名称和版本号
    要修改Tomcat的服务器名称和版本号,你需要编辑Tomcat的server.xml配置文件。这个文件通常位于Tomcat安装目录的conf文件夹下。打开server.xml文件。找到以下部分:<Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirect......
  • Java反序列化
    Java反序列化什么是序列化和反序列化如果我们需要持久化Java对象比如将Java对象保存在文件中,或者在网络传输Java对象,这些场景都需要用到序列化。序列化:将数据结构或对象转换成二进制字节流的过程反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的......
  • C语言 实现 unix时间戳转换到自定义 tm结构体
    之前使用ESP32写了一个闹钟,免得我老是把手机闹钟给滑了就不知该起床了原本想用标准库解决的,但是这个时间一直不准,逼得用SNTP获取了步进单位为(second)的时间戳,然后使用GPtimer来维持时间戳才算是把精准计时给解决了废话不多说,直接上代码typedefstruct{intyear;......
  • 自定义DFS,DFT,DTFT函数并比较关系
    一、DFS(离散傅里叶级数)functiony=DFS(x,L)N=length(x);xi=[x;zeros(L-N,1)]; y=zeros(1,L);fork=1:Lsum=0; forn=1:Lsum=sum+xi(n)*exp(-2j*pi*k*n/L); end y(k)=sum; end end 二、DFT(离散傅里叶变换) functiony=DFT(x,L)N......
  • 自定义卷积函数并计算窗函数的卷积
    一、自定义卷积functiony=Convu(x,W) Nx=length(x); Nw=length(W); y=zeros(1,Nx+Nw-1); forn=1:Nx+Nw-1 sum=0; startIdx=max(1,n-Nw+1); endIdx=min(n,Nx); fork=1:Nw ifstartIdx+k-1<=endIdx sum=sum+......
  • zotero自定义界面
    简介本人zotero使用到的四个插件EtherealStyle(这是一个多彩的插件,用于增强Zotero的界面功能)GreenFrog(显示影响因子)JasminumTranslateforZotero插件下载来源:Zotero插件商店|Zotero中文社区(zotero-chinese.com)最终页面效果显示影响因子、期刊分区、CCF分区......
  • Qt实现自定义控件-按钮
    背景:想着自己实现一个好看一点的按钮,切换时加一点动画。也算巩固一下Qt的基本知识。基本环境: 主要用到的类有:QBrush:画刷,主要是画一些颜色啥的。QPainter:画笔,可以画形状。比如带弧形的矩形,圆形,写字等。QPropertyAnimation:动画相关。关键逻辑:重载paintEvent:实现渲染逻辑,......
  • C# WebService返回参数为DataTable报错“XML文档有错误”
    该问题由于DataTable列存在自定义类型。解决该报错需要以下几步:1、自定义类型增加xml序列化2、由于C#从XML反序列化DataSet或DataTable时的默认限制,所以需要先把调用方的项目开放限制,如果是.netframework项目,需要在app.config中添加<configuration><runtime>......
  • Vue.js 自定义事件命名
    什么是Vue.js自定义事件命名?在Vue.js中,自定义事件是一种允许组件之间进行通信的重要机制。通过自定义事件,我们可以在父组件和子组件之间传递数据,实现组件的解耦和复用。Vue.js中的事件命名可以使用驼峰命名法或短横线命名法。但是,Vue.js官方强烈建议使用短横线命名法来定义自定义......