如何序列化和反序列化动态 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\ Index_N_Element { get; set; } } 3、采用固定呆板的代码,无法序列化和反序列化,获得所有动态的\ 到 \数据,以下代码只能从\ 到 \ 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 { /// \是否采用汇总\ \[XmlElement("UseInSummary")\] public int UseInSummary { get; set; } = 1; /// \是否左岸开始\ \[XmlElement("BeginLeft")\] public int BeginLeft { get; set; } /// \是否已分段\ \[XmlElement("IsSubSectioned")\] public int IsSubSectioned { get; set; } /// \文件名\ \[XmlElement("FileName")\] public string FileName { get; set; } /// \断面数\ \[XmlElement("TransectNmb")\] public int TransectNmb { get; set; } /// \总集合数\ \[XmlElement("TotalNmbEnsembles")\] public int TotalNmbEnsembles { get; set; } /// \不良集合总数\ \[XmlElement("TotalBadEnsembles")\] public int TotalBadEnsembles { get; set; } /// \丢失集合总数\ \[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);//要具体获得\ 到 \以下的IndexN对象值。

相关推荐
喵叔哟20 分钟前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
模型时代24 分钟前
Anthropic明确拒绝在Claude中加入广告功能
人工智能·microsoft
2501_9307077839 分钟前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
猫头虎1 小时前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
初级代码游戏1 小时前
套路化编程 C# winform 自适应缩放布局
开发语言·c#·winform·自动布局·自动缩放
大空大地20262 小时前
流程控制语句--switch多分支语句使用、while循环语句的使用、do...while语句、for循环
c#
呉師傅4 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
kylezhao20194 小时前
C#序列化与反序列化详细讲解与应用
c#
JQLvopkk4 小时前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
故事不长丨4 小时前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#