忽略XML序列化中的空值

时间:2012-01-27 11:56:34

标签: c# xml serialization xmlignore

我有一块看起来像

的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;
    }
}

非常感谢任何帮助。

亲切的问候 湾

2 个答案:

答案 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;
    }
}