2013-04-22 9 views
6

mam trochę kodu:Dlaczego muszę wyraźnie rzucić JValue na typ celu przed jego użyciem?

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

Jednak to daje mi (w czasie wykonywania, ponieważ mówimy o dynamicznym tutaj):

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

to czuje się trochę głupio. Dla mnie trochę dynamiki to , a nie, aby wyraźnie określić typy i tak dalej; powinno to być (najlepiej) obsługiwane przez środowisko wykonawcze. Oczywiście JSON.NET może być trochę trudniej wiedzieć, co powinno maskować, jak w danej sytuacji ...

James (lub ktokolwiek inny, kto zna układy wewnętrzne JSON.NET), czy jest to zgodne z projektem? Jeśli dodam instrukcję obsadzoną takimi datami:

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

... wszystko działa bez zarzutu.

Odpowiedz

3

znaleźć odpowiedź here tuż przed wysłaniem ...

Okazuje się, że albo trzeba rzucić, lub użyć właściwości wartość JValue. Mimo to trochę więcej szczegółów na ten temat byłoby miłych. Oczywiście, po prostu możliwość magicznego użycia mojego JValue jako parametru metody trzeciej strony bez obawy o rzutowanie byłoby optymalne, dając najbardziej "dynamiczny język" podobny do doświadczenia z tą (inaczej świetną!) Funkcjonalnością JSON. NETTO.

+0

Dzięki. Szczerze mówiąc, strona, na którą się powoływam, nie wyjaśnia żadnej "przyczyny", dlaczego tak jest (nie daje ona zbyt wielu informacji). Google podało mi trochę więcej szczegółów, ale strona, którą podłączyłem, niestety nie mówi wszystkiego. Oto także inne pytanie z kilkoma szczegółami: http://stackoverflow.com/questions/8067621/why-do-i-get-a-runtimebinderexception-using-json-net-with-dynamic-when-calling-a –

Powiązane problemy