如何为自定义 XML 格式定义类结构

Posted

技术标签:

【中文标题】如何为自定义 XML 格式定义类结构【英文标题】:How to define class structure for custom XML format 【发布时间】:2021-10-15 00:20:47 【问题描述】:

您好,我定义了需要从对象序列化的 xml 格式。 我的 XML 看起来像:

<PerfCheckConsidered>
    <PerfMarker PercentageIncrease="21.4171662006946" MaxValue="6650.55" MinValue="5477.438" TS_09082021093913="5961.733" TS_09082021093646="6650.55" TS_09082021093358="5477.438" TS_09082021093136="5510.135" TS_09082021092614="5768.742" PerfMarkerName="Marker1"/>
    
    <PerfMarker PercentageIncrease="20.9911157408996" MaxValue="7371.881" MinValue="6092.911" TS_09082021093913="7371.881" TS_09082021093646="6092.911" TS_09082021093358="6345.139" TS_09082021093136="6289.624" TS_09082021092614="6782.205" PerfMarkerName="Marker1"/>
    
    <PerfMarker PercentageIncrease="9.22930544021455" MaxValue="6183.199" MinValue="5660.751" TS_09082021093913="6183.199" TS_09082021093646="5660.751" TS_09082021093358="6000.608" TS_09082021093136="5951.08" TS_09082021092614="5870.288" PerfMarkerName="Marker1"/>
    
    <PerfMarker PercentageIncrease="25.0711884164738" MaxValue="10075.0518" MinValue="8055.4538" TS_09082021093913="10062.1176" TS_09082021093646="10061.7749" TS_09082021093358="10075.0518" TS_09082021093136="8055.4538" TS_09082021092614="10063.9758" PerfMarkerName="Marker2"/>
    
    <PerfMarker PercentageIncrease="13.2855819181415" MaxValue="8250.0617" MinValue="7282.5346" TS_09082021093913="8237.9737" TS_09082021093646="8245.9522" TS_09082021093358="8240.958" TS_09082021093136="8250.0617" TS_09082021092614="7282.5346" PerfMarkerName="Marker2"/>
    
    <PerfMarker PercentageIncrease="29.7888969731873" MaxValue="50.4823" MinValue="38.8957" TS_09082021093913="50.4823" TS_09082021093646="46.8748" TS_09082021093358="38.8959" TS_09082021093136="38.8957" TS_09082021092614="40.8915" PerfMarkerName="Marker3"/>
    
    <PerfMarker PercentageIncrease="54.5326940955576" MaxValue="16.9544" MinValue="10.9714" TS_09082021093913="11.9676" TS_09082021093646="12.9662" TS_09082021093358="16.9544" TS_09082021093136="10.9714" TS_09082021092614="10.9714" PerfMarkerName="Marker3"/>
    
    <PerfMarker PercentageIncrease="14.028196761682" MaxValue="64.8256" MinValue="56.8505" TS_09082021093913="60.8377" TS_09082021093646="62.8326" TS_09082021093358="56.8505" TS_09082021093136="59.2591" TS_09082021092614="64.8256" PerfMarkerName="Marker3"/>
    
    <PerfMarker PercentageIncrease="8.33604893089013" MaxValue="25.9311" MinValue="23.9358" TS_09082021093913="25.9311" TS_09082021093646="23.9358" TS_09082021093358="25.93" TS_09082021093136="25.9306" TS_09082021092614="24.9344" PerfMarkerName="Marker3"/>
    
</PerfCheckConsidered>

在上面的 XML 中,TagName 像 TS_09082021093913,TS_09082021093646,TS_09082021093136,TS_09082021092614 在编译时是未知的,这些是由本地磁盘中存在的文件名形成的时间戳名称。

我应该如何定义我的对象结构来填充这种数据

当前类看起来像(从这个结构中我无法获得所需的 xml 格式)

 
public class PerfCheck

        
        public string PerfMarkerName  get; set; 

        
        public string PercentageIncrease  get; set; 

        
        public string MaxValue  get; set; 

         
        public string MinValue  get; set; 


        
       public string Marker  get; set; 

     
       public List<TimeStampToInstances> TimeStampToMarkerValues  get; set; 
 


[Serializable]
public class TimeStampToInstances

    
    public string TimeStamp  get; set; 

    
    public List<double> InstancesValues  get; set; 
    

目前我正在使用我的自定义逻辑来形成 XML,但我被告知使用普通的 xml 序列化并尝试修改类结构以适应 xml 格式 这可能吗?

【问题讨论】:

请参阅:XmlAnyAttributeAttribute - 但是,您的类似乎与显示的 xml 没有任何共同之处 到目前为止,我的值低于 List - TS_09082021093913,TS_09082021093646,TS_09082021093136,TS_09082021092614。但是使用这种类结构,我无法实现所需的 XML 格式。那么有没有办法将当前的类结构序列化为显示的 xml 格式? 现有的类?不,没有——至少,不是通过标准的内置库处理 那么How to deserialize element with list of attributes in C# 和/或C# XML deserialize all attributes as a collection 的重复? 【参考方案1】:

感谢大家的宝贵意见。

我能够通过使用动态对象来实现所需的 XML 格式。 我将我的动态对象序列化为中间 XML,从中创建了所需格式的 XML。

【讨论】:

以上是关于如何为自定义 XML 格式定义类结构的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何为整个应用程序设置自定义字体[重复]

如何为 Cloudwatch 创建自定义文本格式化程序?

如何为以下示例创建自定义格式、公式或 VBA 代码?

如何为自定义结构中定义的无序集编写自定义哈希函数?

如何为计时时间戳使用自定义 serde 反序列化器?

android如何为自定义的类传递参数?