2012-01-17 5 views
2

입니다 :역 직렬화 GUID를 입력합니다 잃고 다음 클래스 감안할 때 문자열

public class Entity 
{ 
    public Guid UniqueId 
    { 
     get; 
     set; 
    } 
} 

다음 테스트가 실패 : 오류로

[Test] 
    public void GuidTest() 
    { 
     var entity = new Entity { UniqueId = Guid.NewGuid() }; 
     var entityJson = JsonConvert.SerializeObject(entity); 
     dynamic reconstitutedEntity = JsonConvert.DeserializeObject<ExpandoObject>(entityJson); 
     Assert.That(reconstitutedEntity.UniqueId, Is.EqualTo(entity.UniqueId)); 
    } 

:

예상 : 35ac3081-07cb-41dd-bf40-22e2ff47863c 하지만 : "35ac3081-07cb-41dd-bf40-22e2ff47863c"

Json.Net의 버그입니까? 예상되는 동작입니까? ExpandoObject를 사용하여 테스트를 통과하려면 어떻게합니까?

ExpandoObject를 Entity로 대체하면 올바르게 작동합니다. 사용자 정의 JsonConverter를 작성해야합니까? CanRevert와 WriteJson이 (성공적으로)되었지만 ReadJson이 호출되지 않았습니다.

답변

1

ExpandoObject는 해당 필드를 Guid 유형으로 사용한다는 것을 알 수 없으므로 속성 유형은 아마도 문자열입니다. 확인하려면이 테스트를 실행하십시오.

Debug.Assert(reconstitudedEntity.UniqueId is String); 
+0

답장을 보내 주셔서 감사합니다. 그것은 단언 실패의 "but but"부분에 분명하게 명시되어 있습니다. –