2011-10-21 9 views
6

używam biblioteki simplejson stąd: http://simplejson.codeplex.com/.Net simplejson: Cofnięcie JSON do dynamicznego obiektu

Chciałbym deserializowania ciąg JSON do dynamicznego obiektu jak poniżej:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

Część deserializacji działa poprawnie, ale wywołanie json.foo zgłasza wyjątek RuntimeBinderException z komunikatem o błędzie 'SimpleJson.JsonObject' does not contain a definition for 'foo'.

Jak mogę deserializować ciąg JSON za pomocą SimpleJson i uzyskać dostęp do właściwości dynamicznych za pomocą składni json.foo?

Odpowiedz

9

Cóż, to tylko kwestia odczytywania kodu źródłowego dla SimpleJson. :-) Linia musi być odkomentowana, aby obsługiwać dynamiczną składnię, której szukam. Nie wiem, dlaczego nie jest to domyślnie włączone.

z kodu źródłowego:

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

To sprawiedliwe komentarz L.B. Nie mogę usunąć tego pytania, więc mam nadzieję, że będzie to użyteczny artefakt dla innych, którzy instalują SimpleJson przez NuGet i napotykają na ten sam problem, co ja. –

+1

+1 za bycie dla mnie pomocnym. –

2

Patrząc na próbki, dostęp do właściwości, takich jak JsonObject, jest podobny do słownika. Więc zamiast json.foo, potrzebujesz json["foo"].

W rzeczywistości jesteś tutaj gorszy niż tutaj, ponieważ nie ma w tym nic dynamicznego: metoda zwraca JsonObject, która po prostu nie ma elementu . Jeśli nie używałeś dynamic, mógłbyś otrzymać ten komunikat o błędzie podczas kompilacji.

Jeśli spojrzysz na link L.B. pod warunkiem, że pokazuje, jak wdrożyć tę funkcję dynamiczną samodzielnie.

1

> csc/t: library/d: SIMPLE_JSON_DYNAMIC SimpleJson.cs

Powiązane problemy