簡體   English   中英

序列化為XML時如何有選擇地排除類成員

[英]How to Optionally exclude a class member when serializing to XML

我剛剛接手了一個相當大的項目。 我的任務之一是修改從FedEx獲取報價的代碼。 當前,為了獲得包括每個“ ServiceType”(地面,2天,整夜等)報價的貨件的一組報價,代碼對每種類型進行一次調用。 聯邦快遞提供了用於獲取此信息的Web服務。 經過一些研究后,看起來該Web服務可以通過一次往返返回多個ServiceType引號。 為此,我應該“將服務類型排除在請求之外”。 以下是向我指出該問題的問題 。)

因此,我知道可以通過使用[System.Xml.Serialization.XmlIgnoreAttribute()]裝飾屬性來從序列化中排除服務類型屬性。 但是,只有在我希望獲得所有ServiceType值的結果並且仍然能夠在我知道用戶想要哪種運輸方式的情況下仍能夠傳遞單個服務類型時,才可以這樣做嗎?

編輯:FedEx的文檔指示此字段是可選的。 一些基本測試表明,使用XmlIgnoreAttribute從請求中排除它確實會返回多個ServiceType的數據。

如果在要序列化的XXX屬性旁邊實現一個public bool ShouldSerializeXXX()函數,則當該函數返回false時,XmlSerializer將忽略相應的XXX屬性。 您必須具有一定的設置基礎(也許XXX屬性可以為null?或者可以使用其他狀態來做出決定)。

因此,遵循以下原則:

public class MyClass
{
    public ServiceType? ServiceType { get; set; }
    public bool ShouldSerializeServiceType() { return ServiceType.HasValue; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM