XML Serialization에서 null 값을 무시합니다
-
14-11-2019 - |
문제
나는 와 같은 것처럼 보이는 XML을 가지고있다.
<SubscriptionProduct>
<SubscriptionProductIdentifier>
<SubscriptionProductIdentifierType>
<SubscriptionProductIDType>01</SubscriptionProductIDType>
<ID>123456</ID>
<Value>AAAA</Value>
</SubscriptionProductIdentifierType>
<SubscriptionProductIdentifierType xsi:nil="true" />
</SubscriptionProductIdentifier>
<SubscriptionProductDescription />
</SubscriptionProduct>
.
SubscriptionProductItentifierType은 컬렉션 이며이 경우에는 하나의 항목 만 포함됩니다.
두 번째 빈 항목을 어떻게 무시합니까?
XML 무시를 추가하려고 시도했지만 전체 컬렉션을 제거하고 데이터가 없으면 컬렉션의 두 번째 항목 만 제거하고
[System.Xml.Serialization.XmlIgnoreAttribute()]
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField;
}
set {
this.subscriptionProductIdentifierField = value;
}
}
.
도움이 많이 많이 감사 할 것입니다.
종류의 ZAL
해결책
There is not one item in your collection but two, one of which is null
just filter null items during addition, or even before return, depending on your business logic
public SubscriptionProductIdentifierType[] SubscriptionProductIdentifier {
get {
return this.subscriptionProductIdentifierField.Where(s=>s!=null).ToArray();
}
...
}
Hope this helps
다른 팁
XmlIgnoreAttribute will ignore the member, not just items that are null within an array. If you have no way of filtering the results or removing the null node ahead of time, then store a local variable to hold the filtered results and lazy load it.
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;
}
}
제휴하지 않습니다 StackOverflow