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这个可以吗?如果可以的话怎样使用?

C#语言中的XmlSerializer类的Serialize(Stream,Object)方法举例详解

XmlSerializer C# - 对象传递的简单值被转换并显示为 xml 文件中的科学值