Ignorando o valor nulo na Serialização de XML
-
14-11-2019 - |
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
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;
}
}