#if region不起作用

时间:2015-05-30 12:32:02

标签: c# xml xml-serialization

我想使用#if语句跳过val为真时序列化val2,并在val为假时序列化val2。但我的代码似乎不起作用:

#if val2
    [XmlIgnore]
#else   
    [XmlElement(ElementName = "val")]
#endif
public bool val
{
    { get; set; } = false;
}

[XmlElement(ElementName = "val2")]
public bool val2
{
    { get; set; } = true;
}

我需要做些什么才能让它正常工作?感谢

2 个答案:

答案 0 :(得分:1)

我认为您需要使用#define定义要测试的符号。这些是预处理器指令,你不能使用正常的属性名称等,因为它们在编译期间在预处理之后发生。

这来自标准:

  

预处理表达式的评估总是产生一个布尔值。预处理表达式的评估规则与常量表达式(第7.19节)的评估规则相同,只是可以引用的唯一用户定义实体是条件编译符号。

正如this questio n所指出,你需要这样的东西:

public class Item
{
    public bool val { get; set; }

    public bool ShouldSerializeval()
    {
       return !val2;
    }

    [XmlElement(ElementName = "val2")]
    public bool val2 { get; set; }  
}

void Main()
{
    Item item = new Item(){val=true, val2=true};

    XmlSerializer xs = new XmlSerializer(typeof(Item));
    StringWriter sw = new StringWriter();
    xs.Serialize(sw, item);
    sw.ToString();
}

答案 1 :(得分:0)

只需在代码中添加以下内容之一,val为真时,val2将不会被序列化:

public bool ShouldSerializeval()
{
    return val2 == false;
}

public bool ShouldSerializeval()
{
    return !val2;
}