MrE*_*yes 39 c# json dynamic json.net deserialization
我正在使用Newtonsoft JSON库对传入的原始JSON执行动态反序列化,并且发现了一些我无法解释的内容.
起点是以下JSON字符串:
{
"task": {
"dueDate": "2012-12-03T00:00:00"
}
}
Run Code Online (Sandbox Code Playgroud)
那里没什么太复杂的......
在代码我然后这样做:
var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson);
DateTime dueDate = dyn.task.dueDate.Value;
Run Code Online (Sandbox Code Playgroud)
这段代码已经存在好几个月并且工作正常,但是在最近的测试版本中我们看到了以下错误:
'Newtonsoft.Json.Linq.JObject'不包含'task'的定义
堆栈跟踪:在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRet]的CallSite.Target(Closure,CallSite,Object)处(CallSite站点,T0 arg0)
现在这是奇怪的,如果我改变上面的代码,一切都开始工作了:
DateTime dueDate = dyn.task.dueDate.Value;
Run Code Online (Sandbox Code Playgroud)
至
DateTime dueDate = dyn["task"]["dueDate"].Value;
Run Code Online (Sandbox Code Playgroud)
所以,虽然这是"固定的",但我不明白为什么这会解决它以及可能的原因.有没有人有任何想法
Hyl*_*ean 46
你可以试试这个:
dynamic task = JObject.Parse(rawJson);
Run Code Online (Sandbox Code Playgroud)
文档:使用动态查询JSON
在我的情况下,事实证明我抓住了第一次机会异常,所以虽然抛出了这个异常但实际上并没有阻止我的代码执行.
知道为什么这会发生在Json.NET反序列化的某些内容上,但并非所有内容都是如此.例如,我有一个动态对象,我在单元测试中使用json.net序列化,然后反序列化序列化内容.序列化内容看起来与内容相同,在运行时,这些内容会导致运行时绑定程序异常被抛出.