C# 在 XmlSerializer 中使用结构而不创建单独的 xml 节点
Posted
技术标签:
【中文标题】C# 在 XmlSerializer 中使用结构而不创建单独的 xml 节点【英文标题】:C# Using struct in XmlSerializer without creating a separate xml node 【发布时间】:2021-09-13 07:15:54 【问题描述】:我有一个要序列化为 Xml 的类:
[XmlRoot(ElementName = "readCase", Namespace = "XXX")]
public class ReadCase
[XmlElement(ElementName = "versionAsOf", Namespace = "XXX")]
public BaseUtcTimeStamp VersionAsOf get; set;
我创建了一个结构 BaseUtcTimeStamp:
[Serializable]
public struct BaseUtcTimeStamp
private string _utcTimestamp;
public string UtcTimestamp get => _utcTimestamp; set // set is needed for XmlSerializer
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 如下所示:
<case:readCase>
<case:versionAsOf>
<case:UtcTimestamp>2021-07-01T07:38:14Z</case:UtcTimestamp>
</case:versionAsOf>
</case:readCase>
我希望 BaseUtcTimeStamp 类型值直接位于 VersionAsOf 中(如 GUID)。示例:
<case:readCase>
<case:versionAsOf>2021-07-01T07:38:14Z</case:versionAsOf>
</case:readCase>
【问题讨论】:
注意:这里不需要[Serializable]
- 它与xml序列化无关
【参考方案1】:
[XmlText]
public string UtcTimestamp get => _utcTimestamp; set
【讨论】:
以上是关于C# 在 XmlSerializer 中使用结构而不创建单独的 xml 节点的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 c# xmlserializer 反序列化以前序列化的 XML
c# XmlSerializer 反序列化器缺少默认命名空间
C# XmlSerializer DefaultAttribute 属性仍然为 nullables 序列化
在C#中 如何序列化图片 用System.Xml.Serialization.XmlSerializer这个可以吗?如果可以的话怎样使用?