4

次のようなxmlがあります

  <SubscriptionProduct>
    <SubscriptionProductIdentifier>
      <SubscriptionProductIdentifierType>
        <SubscriptionProductIDType>01</SubscriptionProductIDType>
        <ID>123456</ID>
        <Value>AAAA</Value>
      </SubscriptionProductIdentifierType>
      <SubscriptionProductIdentifierType xsi:nil="true" />
    </SubscriptionProductIdentifier>
    <SubscriptionProductDescription />
  </SubscriptionProduct>

ご覧のとおり、SubscriptionProductIdentifierType はコレクションであり、この場合は 1 つのアイテムしか含まれていません。
2 番目の空の項目を無視するにはどうすればよいですか?

xml ignore を追加しようとしましたが、コレクション全体が削除され、データがない場合はコレクション内の 2 番目の項目のみを削除したいと考えています。

[System.Xml.Serialization.XmlIgnoreAttribute()]
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
    get {
        return this.subscriptionProductIdentifierField;
    }
    set {
        this.subscriptionProductIdentifierField = value;
    }
}

どんな助けでも大歓迎です。

敬具 ザル

4

2 に答える 2

1

コレクションにはアイテムが 1 つではなく 2 つあり、そのうちの 1 つが null です

ビジネスロジックに応じて、追加中または返す前にnullアイテムをフィルタリングするだけです

public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
    get {
        return this.subscriptionProductIdentifierField.Where(s=>s!=null).ToArray();
    }
...
}

お役に立てれば

于 2012-01-27T12:07:31.673 に答える
0

XmlIgnoreAttribute は、配列内の null のアイテムだけでなく、メンバーを無視します。結果をフィルタリングしたり、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;
    }
} 
于 2012-01-27T13:00:17.917 に答える