XML序列化程序忽略属性取决于条件



我正在使用XmlConvert。对于Class的一个实例,只有一个属性具有值,另一个属性为空。

public class Class
{
[XmlAttribute("ValueA")]
public decimal? ValueA { get; set; }
[XmlAttribute("ValueB")]
public decimal? ValueB { get; set; }
}

这里的问题是序列化程序无法序列化null属性。如何只显示一个有价值的属性?示例:

var item = new Class { ValueA = 1, ValueB = null}
<?xml version="1.0" encoding="utf-8"?>
<model>
<ValueA>1</ValueA>
</model>

您需要包装可为null的属性才能使其工作。例如,对于您的ValueA

public class Class
{
[XmlIgnore]
public decimal? ValueA { get; set; }
[XmlAttribute("ValueA")]
public decimal ValueAUnwrapped
{
//this will only called, when ShouldSerializeValueAUnwrapped return trues, so no NRE here
get => ValueA.Value; 
set => ValueA = value;
}

public bool ShouldSerializeValueAUnwrapped() => ValueA.HasValue;
}

此代码指示序列化程序仅在原始ValueA属性具有值时序列化ValueAUnwrapped属性。这是通过添加ShouldSerialize<Name>()函数来实现的,串行器将为相应的Name属性调用该函数:https://learn.microsoft.com/en-us/dotnet/desktop/winforms/controls/defining-default-values-with-the-shouldserialize-and-reset-methods?view=netframeworkdesktop-4.8

你还需要为ValueB重复同样的技巧。

相关内容

  • 没有找到相关文章