2012-07-11 6 views
0

나는 다음과 같은 개체의 기본 클래스는 직렬화 표시 한 : 내가 가지고있는닷넷 직렬화에 기본값을 유지하는 방법

[Serializable] 
public class ContactEntity : EntityBase 
{ 
... 

:

[Serializable] 
public abstract class EntityBase 
{ 
    public bool Is_ActiveNull = true; 
    [XmlElement(ElementName = "Is_ActiveFromNull")] 
    ... 

내가 기본 엔티티로부터 상속 한 후 구체적인 실체가 이 엔티티를 계약시 입력 매개 변수로 사용하는 WCF 서비스

클라이언트에서 서비스 참조를 만들 때 reference_cs를 작성하여 Is_ActiveNull 필드의 기본값을 무시합니다. Is_ActiveNullField 기본적으로 false로 설정되어이 경우

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"); 
      } 
     } 
    } 
    ... 

:

는 reference.cs 파일에 EntityBase 클래스입니다.

제 질문은 어떻게 기본값을 유지할 수 있습니까?

감사

답변

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에 대한 연습을 제공하지 않습니다.

Emit DefaultValue 속성을 false로 설정하면 연습이 권장되지 않습니다. 이 작업은 특정 작업 (예 : 상호 운용성 또는 데이터 크기 줄이기)이 필요하면 수행해야합니다 ( ).

+0

이 솔루션은 DataContractSerializer에서만 작동합니다. XmlSerializer를 사용하고 있습니다. 이 유형의 직렬화에 대한 해결책이 있습니까? – zosim

관련 문제