如何在C#中进行XMLSerilization时忽略空值?

问题描述

我正在从数据库获取数据。如果DBObject数据的空值("")不为null,那么我想从XML Serilization中剔除该值。

  EventComment event = new EventComment();
        event.Comments = datalogic.GetComment();

    if(event.Comments != String.Empty){
    //Add Logic
    }
SerializetoXmL(event)
    //dataLogic Class
        public string GetComment()
                {
                    var datalink = _unitOfWork.GetRepository<tbl1>()
                                 .GetFirstOrDefault(predicate: source => (source.id == id));
        
        
                    return datalink .comment;
                }

我知道我们可以使用空值,但是我不想为变量分配空值。我可以从null获得不同的解决方案吗? XML序列化后,我现在得到的是空标签

<comment/>

解决方法

null值已被排除;如果我们正在谈论忽略空字符串(""),那么“条件序列化”是您的朋友。许多序列化程序(包括XmlSerializer)通过众所周知的public bool ShouldSerialize*()模式来支持此操作,例如:

public class Foo
{
    [XmlElement("comment")]
    public string Comment { get; set; }

    public bool ShouldSerializeComment() => !string.IsNullOrEmpty(Comment);
}

如果我使用空的Comment进行序列化:Comment成员未序列化。您可以简单地扩展它以应用您喜欢的任何其他逻辑,例如:

public bool ShouldSerializeComment() => !string.IsNullOrWhiteSpace(Comment);