C# 如何在.net序列化中保留默认值

C# 如何在.net序列化中保留默认值,c#,xml-serialization,C#,Xml Serialization,我将以下实体基类标记为可序列化: [Serializable] public abstract class EntityBase { public bool Is_ActiveNull = true; [XmlElement(ElementName = "Is_ActiveFromNull")] ... 我有一个从基础实体继承的具体实体: [Serializable] public class ContactEntity : EntityBase { ... 我

我将以下实体基类标记为可序列化:

[Serializable]
public abstract class EntityBase
{
    public bool Is_ActiveNull = true;
    [XmlElement(ElementName = "Is_ActiveFromNull")]
    ...  
我有一个从基础实体继承的具体实体:

[Serializable]
public class ContactEntity : EntityBase
{
 ...
我有一个WCF服务,它使用这个实体作为合同中的输入参数

当我从客户端创建服务引用时,它会创建一个reference.cs,它会忽略字段Is_ActiveNull的默认值

这是reference.cs文件中的EntityBase类:

public partial class EntityBase : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{
    private bool Is_ActiveNullField;

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
    public bool Is_ActiveNull {
        get {
            return this.Is_ActiveNullField;
        }
        set {
            if ((this.Is_ActiveNullField.Equals(value) != true)) {
                this.Is_ActiveNullField = value;
                this.RaisePropertyChanged("Is_ActiveNull");
            }
        }
    }
    ...
在本例中,Is_ActiveNullField默认设置为false

我的问题是如何保留默认值


谢谢

他们没有这样的属性可以保留public bool的默认值为\u ActiveNull

但是当反序列化像这样发生时,您可以实现它

You will have to add EmitDefaultValue on you field

 [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)]
    public bool Is_ActiveNull {

and then 

[OnDeserializing]
    void BeforeDeserialization(StreamingContext ctx)
    {
        this.Is_ActiveNull = false;
    }
请注意,MSDN还为EmitDefaultValue提供了一个“不在实践中”选项

不建议将EmitDefaultValue属性设置为false 练习。只有在有特殊需要时才应这样做 (例如用于互操作性或减少数据大小)


看起来,这个解决方案只适用于DataContractSerializer。我正在使用XmlSerializer。这种类型的序列化是否也有解决方案?