6

我有一些这样的代码:

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);

...一切正常。

4

1 回答 1

3

在发布之前在这里找到了答案...

事实证明,我要么必须强制转换,要么使用 JValue 的 Value 属性。不过,关于这方面的更多细节会很好。当然,仅仅能够神奇地使用我的 JValue 作为 3rd 方方法的参数而不必担心转换将是最佳的,从而提供最“动态语言”的体验,使用 JSON 的这个(否则真的很棒!)功能。网。

于 2013-04-22T10:34:45.990 回答