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