当前位置: 首页 > news >正文

如何序列化和反序列化动态 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对象值。

http://www.lryc.cn/news/599659.html

相关文章:

  • 【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验
  • Linux725 磁盘阵列RAID0 RAID1
  • [python][flask]Flask-Login 使用详解
  • win通过OpenSSL生成.ssh id_rsa密钥方法
  • 基于libhv实现的TCP Client Server支持同步,异步传输 (C++11)
  • QT开发技术【串口和C++20协程,实现循环发送、暂停、恢复、停止】
  • 上位机知识篇---Jetson Nano的深度学习GPU推理
  • TCP模型,mqtt协议01 day41
  • 【算法-图论】图的存储
  • 嵌入式——C语言:指针①
  • Web攻防-业务逻辑篇密码找回重定向目标响应包检验流程跳过回显泄露验证枚举
  • Go 官方 Elasticsearch 客户端 v9 快速上手与进阶实践*
  • 深度学习day02--神经网络(前三节)
  • 安装本地python文件到site-packages
  • STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释
  • 【C++详解】模板进阶 非类型模板参数,函数模板特化,类模板全特化、偏特化,模板分离编译
  • 在 .NET 中使用 Base64 时容易踩的坑总结
  • vscode npm run build打包报ELIFECYCLE
  • Linux进程深度解析(2):fork/exec写时拷贝性能优化与exit资源回收机制(进程创建和销毁)
  • 嵌入式学习的第三十五天-进程间通信-HTTP
  • 【论文阅读51】-CNN-LSTM-安全系数和失效概率预测
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读
  • ZYNQ芯片,SPI驱动开发自学全解析个人笔记【FPGA】【赛灵思
  • 秋招Day19 - 分布式 - 理论
  • 【论文阅读】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》
  • 在 Azure 中配置 SMS 与 OTP
  • 高效算法的实现与优化是计算机科学的核心,直接决定了程序的性能和资源消耗。下面针对排序算法、搜索算法和动态规划,深入探讨其高效实现与关键优化技术。
  • 如何用js自动触发deepseek输入并发送,不调用api的情况
  • Java 流(Stream)分类、用途与性能分析