簡體   English   中英

C#XmlSerializer在反序列化時忽略元素

[英]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.

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