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

发布于:2024-10-15 ⋅ 阅读:(53) ⋅ 点赞:(0)

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();
}

网站公告

今日签到

点亮在社区的每一天
去签到