有如下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对象值。