我有一块看起来像
的xml <SubscriptionProduct>
<SubscriptionProductIdentifier>
<SubscriptionProductIdentifierType>
<SubscriptionProductIDType>01</SubscriptionProductIDType>
<ID>123456</ID>
<Value>AAAA</Value>
</SubscriptionProductIdentifierType>
<SubscriptionProductIdentifierType xsi:nil="true" />
</SubscriptionProductIdentifier>
<SubscriptionProductDescription />
</SubscriptionProduct>
如您所见,SubscriptionProductIdentifierType是一个集合,在这种情况下只包含一个项目。
如何忽略第二个空项?
我尝试添加xml ignore,但是它删除了整个集合,我只希望在没有数据的情况下删除集合中的第二项。
[System.Xml.Serialization.XmlIgnoreAttribute()]
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField;
}
set {
this.subscriptionProductIdentifierField = value;
}
}
非常感谢任何帮助。
亲切的问候 湾
答案 0 :(得分:1)
您的收藏中没有一个项目,但有两个,其中一个为空
只是在添加期间或甚至在返回之前过滤空项目,具体取决于您的业务逻辑
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField.Where(s=>s!=null).ToArray();
}
...
}
希望这有帮助
答案 1 :(得分:0)
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;
}
}