Pergunta

Eu tenho um pedaço de xml que é algo como

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

Como você pode ver o SubscriptionProductIdentifierType é um conjunto e, neste caso, contém apenas um item.
Como posso ignorar o segundo item vazio?

Eu tentei adicionar o xml ignorar, no entanto, ele remove toda a coleção e eu só quero o segundo item na coleção removidos se não houver dados.

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

Qualquer ajuda seria muito apreciada.

Com Os Melhores Cumprimentos Zal

Foi útil?

Solução

Não há um item na sua coleção, mas dois, um dos quais é nulo

apenas filtro nulo itens durante a adição, ou até mesmo antes da devolução, dependendo da sua lógica de negócios

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

Espero que isso ajude

Outras dicas

XmlIgnoreAttribute irá ignorar o membro, não apenas os itens que são nulos de uma matriz.Se você não tem nenhuma forma de filtrar os resultados ou remover o nó null antes do tempo e, em seguida, armazenar uma variável local para armazenar os resultados filtrados e carga lenta-lo.

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;
    }
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top