2017-10-09 80 views
0

我需要一種方法來定製C#XML(反)序列化機制在這樣的條件使用這個。對象模型很複雜,所以通過屬性或元素一個元素來實現這個屬性對我來說不是一種選擇。 可以這樣做嗎?的IXmlSerializable的接口方法

+0

在某些時候你必須這樣做,也看到這個https://stackoverflow.com/questions/1495716/net-xmlignore-by-default – Aybe

+0

在'ElementXml'被填充的情況下,其他成員如'PropertyX'具有默認(空)值? – dbc

+0

@dbc如果能解決問題,我可以讓它們具有默認值。 – Filip

回答

0

考慮使用System.ComponentModel.DefaultValue屬性。

public class MyElement 
{ 
    [XmlAttribute] 
    public string PropertyX { get; set; } 

    [XmlElement] 
    public MySubElement SubElement { get; set; } 

    [DefaultValue("")] 
    public string ElementXml { get; set; } 
} 

如果ElementXmlstring.Empty,那麼它不會被序列化。

你應該使用這樣的代碼:

private string _elementXml; 

[DefaultValue("")] 
public string ElementXml 
{ 
    get => _elementXml; 
    set => _elementXml = string.IsNullOrWhiteSpace(value) ? null : value; 
} 

在這種情況下,將不被序列化不僅爲空或空的,但也空格的任何字符串。

+0

這個問題解決了我的問題的哪一部分?跳過ElementXml序列化並不是問題,我也可以用ShouldSerialize方法來做到這一點。我需要帶有註釋的代碼部分解決方案。 – Filip

+0

@Filip - 它使用默認的序列化機制,沒有'IXmlSerializable'實現。 –