单元测试如何使用JSON -net将JSON对象反序列化为动态对象
本文关键字:JSON 对象 反序列化 动态 -net 何使用 单元测试 | 更新日期: 2023-09-27 18:09:05
使用MSTest,当我尝试运行一个具有动态类型的测试时,该类型是JSON对象的容器(来自API查询),我希望能够在下面注释中解引用JSON元素,但它失败了,将其视为一个项目集合似乎是可以的。如果inspect '(jsonResponse.message)'它有一个值"Hi" -但它不会在单元测试中工作。为什么呢?
//http://www.newtonsoft.com/json/help/html/LINQtoJSON.htm//使用Json.net将json对象反序列化为动态对象
[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
}
最后一行没有注释,运行代码,测试工作/通过。如果您在调试时查看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。净