2016-09-26 6 views
0

(APIクエリからの)JSONオブジェクトのコンテナであるタイプの動的テストを実行しようとするとMSTestを使用します。コメントアウトされたJSON要素の参照を下にすることができるようにすることですが、それは失敗します。 '(jsonResponse.message)'を検査する場合、値は「Hi」ですが、単体テストでは機能しません。 なぜですか?ユニットテストjson-netを使用してJSONオブジェクトを動的オブジェクトに逆シリアル化する方法

// http://www.newtonsoft.com/json/help/html/LINQtoJSON.htm // Deserialize json object into dynamic object using Json.net

[TestMethod] 
public void DynamicDeserialization() 
{ 
    dynamic jsonResponse = JsonConvert.DeserializeObject("{\"message\":\"Hi\"}"); 
    JObject d = JObject.Parse("{\"message\":\"Hi\"}"); 
    Assert.IsTrue((string)d["message"] == "Hi");   // Is ok 
// Assert.IsTrue(jsonResponse.message.ToString() == "Hi"); // is not ok 
}  
+1

「は動作しません」の定義 - あなたは例外を得ていますか?もしそうなら、例外メッセージは何を言いますか?そうでない場合は、どのような行動を観察していますか? –

+0

最後の行のコメントを外し、コードを実行してテストしました/合格しました。何が問題ですか。デバッグ中に 'jsonResponse'を見ると、' JObject'でも 'dynamic'としてラップされていることがわかります。 – Nkosi

答えて

0

コメントを外し、最後の行には、コードを実行し、テストが働い/渡されました。デバッグ中にjsonResponseを見ると、JObjectで、dynamicとラップされていることがわかります。

実際にdをdynamicに変換すると、私は同じアサーションを実行することができ、それもパスします。

[TestMethod] 
public void DynamicDeserialization() { 
    var json = "{\"message\":\"Hi\"}"; 
    dynamic jsonResponse = JsonConvert.DeserializeObject(json); 
    dynamic d = JObject.Parse(json); 
    Assert.IsTrue(d.message.ToString() == "Hi"); 
    Assert.IsTrue(jsonResponse.message.ToString() == "Hi"); 
} 
あなたはJson.Netの最新バージョンを使用していることを確認するためにチェックする必要があるかもしれません

関連する問題