我有以下标记为可序列化的实体基类:
[Serializable]
public abstract class EntityBase
{
public bool Is_ActiveNull = true;
[XmlElement(ElementName = "Is_ActiveFromNull")]
...
然后我有了从基本实体继承的具体实体:
[Serializable]
public class ContactEntity : EntityBase
{
...
我有一个WCF服务,它使用这个实体作为合同中的输入参数。
当我从客户端创建服务引用时,它会创建一个引用.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。
我的问题是如何保留默认值?
感谢
它们没有这样的属性,将保留公共布尔is_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实践只有在有特殊需要的情况下才应该这样做(例如用于互操作性或减小数据大小)。