2012-01-17 24 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,它工作得很好。我必須編寫一個定製的JsonConverter嗎?我試圖這樣做,但由於某種原因,雖然CanConvert和WriteJson是(成功),ReadJson從未被調用過。

回答

1

ExpandoObject無法知道您希望該字段是Guid類型,因此屬性類型可能是字符串。要確認,運行此測試:

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

感謝您的答覆,但很明顯。它在斷言失敗的「但是」部分中清楚地表明瞭這一點。 – 2012-01-27 21:23:20

相關問題