2014-12-25 6 views
2

내 클래스 중 하나는 직렬화를 위해 기본 생성자를 사용해야한다는 것입니다. 그러나 일부 속성이 필요하므로이 속성에 접근 할 수있는 최선의 방법은 무엇입니까?기본 생성자가있는 .NET의 필수 속성

    I 데이터 주석 또는 내가 재산에 [필수] 속성을 넣어 같은 것을 사용할 수 있습니다
  • 및 이전 직렬화 체크 각 [필수 : 내가 서 있어요 어디서

    , 나는 두 가지 가능한 시나리오를 참조 ] 속성에 값이 있거나

  • 클래스의 다른 위치에 유효성 검사 로직을 넣어 속성이 올바르게 설정되었는지 확인할 수 있습니다.
+2

어떤 시리얼 라이저? – Plutonix

+0

당신은 비 직렬화를 의미한다고 생각합니다. – tia

+0

이 요구 사항을 충족하는 객체 만 serialize하고 비 직렬화 시간은 거의 고려하지 않습니다. 불량 데이터를 직렬화하지 마십시오. –

답변

3

나는 그것을 간단하게 유지하고 속성을 망치지 않을 것이다.

public interface IDataValidator 
{ 
    void ValidateData(); 
} 

public string Serialize<T>(T obj):where T:IDataValidator 
{ 
    obj.ValidateData(); 
    return Serialize(obj); 
} 

public T Deserialize<T>(string serializedObj):where T:IDataValidator 
{ 
    T obj = Deserialize(serializedObj); 
    obj.ValidateData(); 
} 

public class Book : IDataValidator 
{ 
    public string Isbn {get;set;} 

    public Book(){} 
    public Book(string isbn) 
    { 
     Isbn = isbn; 
    } 

    public void ValidateData() 
    { 
     if(string.IsNullOrEmptyOrWhiteSpace(Isbn) 
      throw new ApplicationException("..."); 
    } 
}