XmlSerializer / XmlAttribute处理可空值类型

时间:2018-08-08 17:17:30

标签: c# serialization

因此,我的任务是复制包含XML元素和属性的现有XML模式。这包括可能未指定的整数。不幸的是,[XmlAttribute]无法处理Nullable值类型。它们是复杂的类型,因此在序列化时会引发异常。由于无法自定义架构,因此无法将此值转换为元素。因此,我尝试了多种破解方法来克服此问题:

  1. 使用字符串(简单,但没有强类型。):

    [XmlAttribute("batchId")]
    public string BatchId { get; set; }
    
  2. 使用属性掩盖可为空的值:

    [XmlIgnore]
    public int? BatchId { get; set; }
    
    [XmlAttribute("batchId")]
    public string BatchIdString
    {
        get { return BatchId?.ToString(); }
        set { }
    }
    
  3. this链接中提到的版本的调整后的实现:

    private const int Sentinel = -345673547;
    
    [XmlAttribute("batchId")]
    public int BatchId { get; set; } = Sentinel;
    
    public bool ShouldSerializeBatchId() => BatchId != Sentinel;
    

事情是,我对任何一个都不满意。我研究了XmlSerializer类,但是它已被锁定,并且如果不复制所有类,就无法扩展它。 (比我上面列出的所有内容都要糟糕!)那么,有没有其他人找到这个问题的理想解决方案?这似乎是一个很常见的问题,令我惊讶的是,MS尚未解决此问题。

0 个答案:

没有答案