2012-01-17 8 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を作成する必要がありますか?私はこれを試みましたが、何らかの理由でReadJsonがCanConvertとWriteJsonが(正常に)呼び出されたことはありませんでした。

答えて

1

ExpandoObjectは、そのフィールドをGuidタイプにしたいということを知る方法がないため、プロパティタイプはおそらく文字列です。確認するには、このテストを実行してください。

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

返信いただきありがとうございます。アサーションの失敗の「あった」部分にはっきりと述べられています。 –

関連する問題