[英]C# XmlSerializer ignore element on deserialization
我的Web服務使用了默認的XmlSerializer
(由Visual Studio自動提供)。 我僅使用屬性來標記方法[WebMethod]
和對象[Serialize()]
等。
Web服務和客戶端之間雙向傳遞了一個對象。
該對象的成員之一(public MyClassType MyClass
;)是單向的,只有一次將值發送給客戶端。 如果客戶端返回此成員集,則我希望Web服務不要對其進行反序列化,以便反序列化的對象包含該成員的null
值。
做了一些研究,如果我使用的是非XmlSerializer
,那么我可以將“ OnDeserialization
”屬性附加到對象中可以實現所需功能的方法上。
我試圖避免這種潛在的情況。 Web服務將對象與成員集一起發送到客戶端。 客戶對成員應有的行為。 客戶端發送回該對象,但該成員未清除(空),因為它忘記了。 Web服務會做一些額外的工作,並將相同的對象發送回去(可能會稍作修改),但是成員的值未更改,因此不再是當前的,客戶端應該看到一個NULL值,以防止客戶端對此采取行動。再次保持不變。 Web服務可以為成員設置一個新值,客戶端應再次對該成員進行操作。
XmlSerializer
是否有類似的簡便方法?
這樣做的快捷方法是在服務器端類上具有proxy屬性,該屬性返回MyClass
的當前值,但在設置時丟棄當前值:
[XmlIgnore]
public MyClassType MyClass { get; set; }
[XmlElement("MyClass")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DebuggerBrowsable(DebuggerBrowsableState.Never)]
public MyClassType GetMyClassForXml
{
get
{
return MyClass;
}
set
{
// DO NOTHING
}
}
然后用[XmlIgnore]
標記“ real”屬性。
有關更復雜的解決方案,請參閱在序列化過程中不更改某些屬性而不更改原始類 。 請注意,使用XmlAttributeOverrides
的答案是不完整的,因為必須將序列化程序緩存在哈希表中,以防止嚴重的內存泄漏 。 有關此類哈希的示例,請檢查XMLSerialize並排除基類 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.