C# 使用XmlSerializer序列化struct时如何避免生成额外XML节点
解决方法
给BaseUtcTimeStamp结构体的UtcTimestamp属性添加[XmlText]特性即可,该特性会告知XmlSerializer将当前属性值作为所属节点的文本内容序列化,不会生成额外的子节点。同时建议补全属性的set方法逻辑,避免反序列化时无法正常赋值。
修改后的BaseUtcTimeStamp代码如下:
[Serializable] public struct BaseUtcTimeStamp { private string _utcTimestamp; [XmlText] public string UtcTimestamp { get => _utcTimestamp; set => _utcTimestamp = value; } public BaseUtcTimeStamp(DateTime utcDateTime) { if (utcDateTime.Kind != DateTimeKind.Utc) { throw new ArgumentException("Given dateTime must be Utc."); } _utcTimestamp = utcDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); } }
修改后序列化输出的XML会直接将时间字符串作为versionAsOf节点的内容,完全符合预期效果。
内容的提问来源于stack exchange,提问作者Astrophage
相关产品推荐
相关产品推荐

