如何序列化和反序列化动态 XmlElement ?

有如下XML,Index_0-Index_N为动态的,N为可变数,如何将对象NoneXML序列化为XML,以及如何将XML内容反序列化为对象NoneXML?

1、XML内容

<NoneXML>

<Index_0>

<UseInSummary>0</UseInSummary>

<BeginLeft>0</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605000</FileName>

<TransectNmb>000</TransectNmb>

<TotalNmbEnsembles>13</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_0>

<Index_1>

<UseInSummary>0</UseInSummary>

<BeginLeft>1</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605001</FileName>

<TransectNmb>001</TransectNmb>

<TotalNmbEnsembles>14</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_1>

<Index_2>

<UseInSummary>1</UseInSummary>

<BeginLeft>0</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605002</FileName>

<TransectNmb>002</TransectNmb>

<TotalNmbEnsembles>18</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_2>

<Index_3>

<UseInSummary>1</UseInSummary>

<BeginLeft>1</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605003</FileName>

<TransectNmb>003</TransectNmb>

<TotalNmbEnsembles>12</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_3>

<Index_4>

<UseInSummary>1</UseInSummary>

<BeginLeft>0</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605004</FileName>

<TransectNmb>004</TransectNmb>

<TotalNmbEnsembles>16</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_4>

<Index_5>

<UseInSummary>1</UseInSummary>

<BeginLeft>1</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605005</FileName>

<TransectNmb>005</TransectNmb>

<TotalNmbEnsembles>15</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_5>

</NoneXML>

XML内容也可能是:

<NoneXML>

<Index_0>

<UseInSummary>0</UseInSummary>

<BeginLeft>0</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605000</FileName>

<TransectNmb>000</TransectNmb>

<TotalNmbEnsembles>13</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_0>

<Index_1>

<UseInSummary>0</UseInSummary>

<BeginLeft>1</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605001</FileName>

<TransectNmb>001</TransectNmb>

<TotalNmbEnsembles>14</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_1>

<Index_2>

<UseInSummary>1</UseInSummary>

<BeginLeft>0</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605002</FileName>

<TransectNmb>002</TransectNmb>

<TotalNmbEnsembles>18</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_2>

<Index_3>

<UseInSummary>1</UseInSummary>

<BeginLeft>1</BeginLeft>

<IsSubSectioned>0</IsSubSectioned>

<FileName>NX20250605003</FileName>

<TransectNmb>003</TransectNmb>

<TotalNmbEnsembles>12</TotalNmbEnsembles>

<TotalBadEnsembles>0</TotalBadEnsembles>

<TotalLostEnsembles>0</TotalLostEnsembles>

</Index_3>

</NoneXML>

2、采用以下代码可以序列化和反序列化,但无法对应具体动态元素N个索引的XML内容,从<Index_0> 到 <Index_N> 无法动态序列化和反序列化

public class NoneXML

{

XmlAnyElement public List<XmlElement> Index_N_Element { get; set; }

}

3、采用固定呆板的代码,无法序列化和反序列化,获得所有动态的<Index_0> 到 <Index_N>数据,以下代码只能从<Index_0> 到 <Index_4>

public class NoneXML

{

XmlElement("Index_0") public IndexN { get; set; }

XmlElement("Index_1") public IndexN { get; set; }

XmlElement("Index_2") public IndexN { get; set; }

XmlElement("Index_3") public IndexN { get; set; }

XmlElement("Index_4") public IndexN { get; set; }

XmlElement("Index_5") public IndexN { get; set; }

}

4、IndexN的子Element

public class IndexN

{

/// <summary>是否采用汇总</summary>

XmlElement("UseInSummary") public int UseInSummary { get; set; } = 1;

/// <summary>是否左岸开始</summary>

XmlElement("BeginLeft") public int BeginLeft { get; set; }

/// <summary>是否已分段</summary>

XmlElement("IsSubSectioned") public int IsSubSectioned { get; set; }

/// <summary>文件名</summary>

XmlElement("FileName") public string FileName { get; set; }

/// <summary>断面数</summary>

XmlElement("TransectNmb") public int TransectNmb { get; set; }

/// <summary>总集合数</summary>

XmlElement("TotalNmbEnsembles") public int TotalNmbEnsembles { get; set; }

/// <summary>不良集合总数</summary>

XmlElement("TotalBadEnsembles") public int TotalBadEnsembles { get; set; }

/// <summary>丢失集合总数</summary>

XmlElement("TotalLostEnsembles") public int TotalLostEnsembles { get; set; }

}

5、序列化

Console.WriteLine();

Console.WriteLine("None对象序列化为XML字符串----------------控制台显示--------------------");

string xml;

XmlSerializer serializer = new XmlSerializer(typeof(NoneXML));

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

ns.Add("", "");//命名空间设为空

using (StringWriter writer = new StringWriter())

{

serializer.Serialize(writer, NoneXML, ns);//, ns

xml = writer.ToString();

Console.WriteLine(xml);//控制台显示

}

6、反序列化

Console.WriteLine();

Console.WriteLine("XML 字符串反序列化为 NoneXML 对象--------------------------------------");

NoneXML newNoneXML;

using (StringReader reader = new StringReader(xml))

{

newNoneXML = (NoneXML)serializer.Deserialize(reader);

}

Console.WriteLine(newNoneXML.Index_0.UseInSummary);//要具体获得<Index_0> 到 <Index_N>以下的IndexN对象值。

相关推荐
蓝鸟19741 小时前
Windows Route 内外网双通原理+实战详解(彻底解决双网卡互斥断网)
windows·网络运维·电脑网络配置·路由冲突解决·route命令·内外网同时上网·windows路由 双网卡双通
2601_961845422 小时前
法考真题及答案解析|历年真题|资料已整理
linux·windows·ubuntu·macos·centos·gnu
ytttr8732 小时前
C# 定时数据库备份工具
开发语言·数据库·c#
小黄人软件3 小时前
Claude和Codex下载离线包 安装遇到问题:windows无法访问指定设备 路径 文件 应用无法打开也无法卸载,解决了
人工智能·microsoft·openai·codex
coolwaterld3 小时前
windows下删文件,找出“到底是谁占用
windows
雪豹阿伟4 小时前
21.Winfrom —— 定时器、日期选择器、进度条、表格、DataTable
c#·上位机·winfrom
z落落4 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#
caimouse5 小时前
Reactos 第6章 进程间通信(续)
windows
触底反弹6 小时前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
W优化大师6 小时前
Windows 更新待处理弹窗一直不消失怎么解决,C 盘空间和后台任务该如何排查
windows·系统优化·磁盘清理·windows11·c盘·系统更新