忽略XML序列化中的null值
本文关键字:null XML 序列化 忽略 | 更新日期: 2023-09-27 18:21:31
我有一段xml,看起来有点像
<SubscriptionProduct>
<SubscriptionProductIdentifier>
<SubscriptionProductIdentifierType>
<SubscriptionProductIDType>01</SubscriptionProductIDType>
<ID>123456</ID>
<Value>AAAA</Value>
</SubscriptionProductIdentifierType>
<SubscriptionProductIdentifierType xsi:nil="true" />
</SubscriptionProductIdentifier>
<SubscriptionProductDescription />
</SubscriptionProduct>
正如您所看到的,SubscriptionProductIdentifierType是一个集合,在本例中只包含一个项
如何忽略第二个空项目?
我已经尝试添加xml忽略,但是它会删除整个集合,并且我只希望在没有数据的情况下删除集合中的第二个项。
[System.Xml.Serialization.XmlIgnoreAttribute()]
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField;
}
set {
this.subscriptionProductIdentifierField = value;
}
}
如有任何帮助,我们将不胜感激。
谨致问候Zal
您的收藏中没有一项,而是两项,其中一项为空
根据您的业务逻辑,只需在添加期间甚至在返回之前过滤空项目
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField.Where(s=>s!=null).ToArray();
}
...
}
希望这能帮助
XmlIgnoreAttribute将忽略成员,而不仅仅是数组中为null的项。如果你没有办法过滤结果或提前删除空节点,那么存储一个本地变量来保存过滤后的结果并延迟加载它
private SubscriptionProductIdentifierType[] _subscriptionProductIdentifierField = null;
private SubscriptionProductIdentifierType[] _filteredSubscriptionProductIdentifier = null;
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier
{
get {
return this._filteredSubscriptionProductIdentifier ?? (
_filteredSubscriptionProductIdentifier = Array.FindAll(
this._subscriptionProductIdentifierField,
delegate(SubscriptionProductIdentifierType t) { return t != null; } ));
}
set
{
this._subscriptionProductIdentifierField = value;
this._filteredSubscriptionProductIdentifier = null;
}
}