在ScanInfo类中,有两个版本的扫描结果。但是这两个属性中只有一个是空的,另一个属性将有值。在本例中,我只想序列化非空属性,输出json属性名为“scanResult”。当我尝试序列化时,当前代码将报告属性名称冲突。我该怎么办?
public class ScanInfo
{
[JsonProperty("scanResult", NullValueHandling = NullValueHandling.Ignore)]
public ScanResult oldVersion;
[JsonProperty("scanResult", NullValueHandling = NullValueHandling.Ignore)]
public ScanResultNew newVersion;
}
public class ScanResult
{
public DateTime StartTime;
public DateTime EndTime;
public IDictionary<string, long> statistic;
}
public class ScanResultNew
{
public DateTime StartTime;
public DateTime EndTime;
public Statistic statistic;
public string status;
}
Json输出:
{
"scanResult":...
}
enter image description here
我的目标是,其中只有一个应该被序列化,两个都应该由属性名称“scanResult”引用。
1条答案
按热度按时间q35jwt9p1#
一种解决方案是将
[JsonIgnore]
属性添加到当前的两个ScanResult
字段中,并添加一个新的公共属性,该属性序列化为“scanResult”。这个新属性可以对要序列化的结果进行“筛选”。下面是一个示例:
这里有一个快速的gif,显示它的工作原理: