2012-07-11 60 views
0

我有以下實體基類標記爲可序列:如何在.net序列保留默認值

[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。

我的問題是如何保持默認值?

感謝

回答

0

他們沒有這樣的屬性,以保障公衆布爾Is_ActiveNull

的默認值但當Deseralizing發生這樣

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做一個Not on的練習

設置Emit DefaultValue屬性爲false不是推薦的 練習。只有在特定需要時才應該這樣做 (如用於互操作性或減小數據大小)。

+0

看來,這種解決方案只適用於DataContractSerializer。我正在使用XmlSerializer。這種類型的序列化還有解決方案嗎? – zosim 2012-07-11 08:12:52