You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义类结构实现含动态属性的自定义XML格式序列化

解决方案

该方案完全可行,.NET 标准 XML 序列化(XmlSerializer)提供了 [XmlAnyAttribute] 特性,专门用于承载编译时无法确定的动态属性,刚好适配你的需求。


调整后的类结构

using System.Xml;
using System.Xml.Serialization;

// 根节点对应配置
[XmlRoot("PerfCheckConsidered")]
public class PerfCheckConsidered
{
    [XmlElement("PerfMarker")]
    public List<PerfMarker> PerfMarkers { get; set; } = new List<PerfMarker>();
}

public class PerfMarker
{
    // 固定属性标记为XmlAttribute,序列化时会生成为节点属性
    [XmlAttribute]
    public string PerfMarkerName { get; set; }
    
    [XmlAttribute]
    public string PercentageIncrease { get; set; }
    
    [XmlAttribute]
    public string MaxValue { get; set; }
    
    [XmlAttribute]
    public string MinValue { get; set; }

    // 所有动态时间戳属性由该字段承载,不需要额外定义属性
    [XmlAnyAttribute]
    public XmlAttribute[] TimeStampAttributes { get; set; }
}

数据填充&序列化示例

1. 填充动态时间戳属性

// 示例:你从本地文件读取到的时间戳与对应值的映射
var timeStampValues = new Dictionary<string, double>
{
    {"TS_09082021093913", 5961.733},
    {"TS_09082021093646", 6650.55},
    {"TS_09082021093358", 5477.438},
    // 其余时间戳数据...
};

// 构造XmlAttribute列表
var xmlDoc = new XmlDocument();
var attrList = new List<XmlAttribute>();
foreach (var kvp in timeStampValues)
{
    var attr = xmlDoc.CreateAttribute(kvp.Key);
    attr.Value = kvp.Value.ToString();
    attrList.Add(attr);
}

// 初始化PerfMarker对象
var marker1 = new PerfMarker
{
    PerfMarkerName = "Marker1",
    PercentageIncrease = "21.4171662006946",
    MaxValue = "6650.55",
    MinValue = "5477.438",
    TimeStampAttributes = attrList.ToArray()
};

2. 标准序列化生成XML

// 初始化根对象,添加所有PerfMarker
var root = new PerfCheckConsidered();
root.PerfMarkers.Add(marker1);
// 继续添加其他Marker...

// 执行序列化
var serializer = new XmlSerializer(typeof(PerfCheckConsidered));
using (var writer = new StreamWriter("输出文件路径.xml"))
{
    serializer.Serialize(writer, root);
}

原类结构问题说明

你原有定义中的 TimeStampToMarkerValues 是列表类型,默认序列化会生成嵌套的子节点结构,无法直接映射为父节点的属性。使用 [XmlAnyAttribute] 特性可以直接将集合内的属性直接挂载到当前 PerfMarker 节点上,完全匹配你需要的XML格式。


内容的提问来源于stack exchange,提问作者Pruthvi Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:24:02