2013-04-22 5 views
6

Ich habe einige Code wie folgt aus:Warum muss ich JValue explizit auf einen Zieltyp umwandeln, bevor ich es verwende?

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

aber das gibt mir (zur Laufzeit, da wir hier über dynamische sprechen):

RuntimeBinderException 
The best overloaded method match for 'System.IO.File.SetLastWriteTime(string, System.DateTime)' has some invalid arguments 

Das fühlt sich ein bisschen dumm. Für mich ist ein bisschen der Punkt der Dynamik zu nicht müssen explizit Typen angeben und so weiter; Dies sollte (im Idealfall) von der Laufzeit übernommen werden. Natürlich kann es für JSON.NET etwas schwierig sein zu wissen, was es in einer bestimmten Situation tun sollte ...

James (oder jemand anders, der mit den JSON.NET-Interna vertraut ist), ist das Absicht? Wenn ich ein Handbuch Datetime wie folgt insg:

File.SetLastWriteTime("c:/temp/somefile.txt", (DateTime) result.LastModifiedTime); 

... alles funktioniert gut.

Antwort

3

die Antwort gefunden here direkt vor der Veröffentlichung ...

Es stellt sich heraus, dass entweder ich habe zu werfen, oder die Value-Eigenschaft von JValue zu verwenden. Noch ein paar Details dazu wären nett. Natürlich wäre es einfach optimal, meinen JValue als Parameter für eine 3rd-Party-Methode zu verwenden, ohne sich Gedanken über das Casting machen zu müssen, was die "dynamische Sprache" -ähnliche Erfahrung mit dieser (ansonsten wirklich großartigen!) Funktionalität von JSON ergibt. NETZ.

+0

Danke. Um ehrlich zu sein, erklärt die Seite, auf die ich mich beziehe, keines der "Warum", warum es so ist (es gibt überhaupt nicht zu viele Informationen). Google gab mir weitere Details, aber die Seite, mit der ich verlinkt bin, sagt leider nicht alles. Hier ist auch eine andere Frage mit einigen Details: http://stackoverflow.com/questions/8067621/why-do-i-get-a-runtimebinderexception-using-json-net-with-dynamic-when-calling-a –

Verwandte Themen