2010-07-01 5 views

답변

26

에 의해 ScanDevice = "XeroxScan"을 설정하려면 이 같은 패턴 : 생성자가 직렬화 복원시에 호출되지 않습니다으로

[DataContract] 
public class MyClass 
{ 
    [DataMember] 
    public string ScanDevice { get; set; } 

    public MyClass() 
    { 
     SetDefaults(); 
    } 

    [OnDeserializing] 
    private void OnDeserializing(StreamingContext context) 
    { 
     SetDefaults(); 
    } 

    private void SetDefaults() 
    { 
     ScanDevice = "XeroxScan"; 
    } 
} 

에서, OnDeserializing을 잊지 마십시오.

+0

감사 댄. 나는 질문이있다. 기본값은 XeroxScan이지만 사용자가 HP 스캔을 통과하면 HP 스캔이 올바르게 수행됩니까? – acadia

+0

그들이 생성자에 장치를 전달 했습니까? 그렇다면 SetDefaults를 호출 한 후 생성자에서 속성을 설정할 수 있으며 새 값이 사용됩니다. deserialize가 발생하기 전에 OnDeserializing이 호출되기 때문에 데이터가 deserialize 될 때도 마찬가지입니다. 이렇게하면 직렬화 복원 중에 속성이 채워지기 전에 모든 초기 '기본'상태를 설정할 수 있습니다. –

+0

나는 이것을 시도했지만 작동하지 않는 것 같습니다. OnDeserializing은 이진 직렬화에서만 사용되지 않습니까? – xr280xr

5

당신은 항상 XeroxScan로 기본 설정하려면, 왜 같은 간단한 일하지 :

[DataMember(EmitDefaultValue = false)] 
public string ScanDevice= "XeroxScan"; 
+0

안녕하세요 kd7, 솔루션 측면에서 DataContract를 사용하지만이 DataContract가 인수로 전달되는 수신 요청의 경우에만 솔루션이 작동합니다. 대체 솔루션으로 DataContract에 두 개의 [한 일반 및 한 Nullable] 속성을 만들고 null 가능 유형을 DataMember로 노출하고 노출 된 필드의 값을 비공개 필드로 설정해야합니다. – ajaysinghdav10d

+0

유형 기본값에 대한 벌금 및 다른 사람을 위해 단지 훨씬 더 우아한 이모 – user1496062

관련 문제