Come deserializzare usando JSON.Net in un tipo anonimo?

Sto solo provando a creare un tipo anonimo da JSON senza sapere nulla dei parametri prima del tempo e interpretandoli completamente (possibilmente con suggerimenti). cioè quel valore “sembra” come un int, una stringa o una data.

L’unico modo che conosco finora è quello di creare un tipo anonimo di cui hai una conoscenza preliminare. Vedi il metodo .DeserializeAnonymousType (…) qui sotto.

Qualcuno può fare meglio di questo? Grazie.

var jsonString = "{\"user_id\": 1, \"user_type\": \"moderator\", \"name\": \"Fred\"}"; JToken root = JObject.Parse(jsonString); var anonTemplate = new{user_id=0, user_type="", name="" }; var a = JsonConvert.DeserializeAnonymousType(root.ToString(), anonTemplate); var b = JsonConvert.DeserializeObject(root.ToString()); // actually turns into a JsonObject which is something differet. 

Aggiornare

Ho scaricato dynamicduck e sto giocando un po ‘. Sarà questa strana idea dynamic di “wrapper” di Brian essere utilizzabile nei modi che ho bisogno (serializzabile, ecc.)?

http://weblogs.asp.net/britchie/archive/2010/08/05/json-net-dynamic-extensions.aspx

http://weblogs.asp.net/britchie/archive/2010/08/03/dynamicduck-duck-typing-in-a-dynamic-world.aspx

È ansible deserializzare con JSON.NET su ExpandoObject usando ExpandoObjectConverter .

Per creare un tipo anonimo in fase di esecuzione, è un po ‘più complicato, dai un’occhiata ai cerchi saltati in questa discussione:

Come creare LINQ Expression Tree per selezionare un tipo anonimo

Come si può vedere un bel po ‘di sforzo che probabilmente non ne vale la pena in quanto non si otterrebbe la sicurezza del tempo di compilazione. Quindi un dinamico o ExpandoObject sono le tue migliori scommesse.