2017-10-09 122 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'实现。 –