我有一些这样的代码:
var jsonSerializer = new JsonSerializer();
var json = @"{ ""LastModifiedTime"": ""2013-04-19T18:18:09+03:00"" }";
var result = jsonSerializer.Deserialize<dynamic>(new JsonTextReader(new StringReader(json)));
File.SetLastWriteTime("c:/temp/somefile.txt", result.LastModifiedTime);
但是,这给了我(在运行时,因为我们在这里谈论动态):
RuntimeBinderException
The best overloaded method match for 'System.IO.File.SetLastWriteTime(string, System.DateTime)' has some invalid arguments
这感觉有点傻。对我来说,动态的一点是不必显式指定类型等等。这应该(理想情况下)由运行时处理。当然,对于 JSON.NET 来说,在给定的情况下知道它应该伪装成什么可能有点困难......
James(或其他任何熟悉 JSON.NET 内部的人),这是设计使然吗?如果我像这样添加手动 DateTime 演员表:
File.SetLastWriteTime("c:/temp/somefile.txt", (DateTime) result.LastModifiedTime);
...一切正常。