Quindi JavaScriptSerializer è stato deprecato a favore di DataContractJsonSerializer.
var client = new WebClient();
var json = await client.DownloadStringTaskAsync(url); // http://example.com/api/people/1
// Deprecated, but clean looking and generally fits in nicely with
// other code in my app domain that makes use of generics
var serializer = new JavaScriptSerializer();
Person p = serializer.Deserialize<Person>(json);
// Now have to make use of ugly typeof to get the Type when I
// already know the Type at compile type. Why no Generic type T?
var serializer = new DataContractJsonSerializer(typeof(Person));
Person p = serializer.ReadObject(json) as Person;
JavaScriptSerializer è bello e ti permette di deserializzare usando un tipo di T generico nel nome della funzione. Comprensibilmente, è stato deprecato per una buona ragione, con DataContractJsonSerializer, puoi decorare il tuo tipo per essere deserializzato con varie cose, quindi non è così fragile come JavaScriptSerializer, ad esempio
[DataMember(name = "personName")]
public string Name { get; set; }
C'è una ragione particolare per cui hanno deciso di consentire solo agli utenti di passare nel tipo?
Type type = typeof(Person);
var serializer = new DataContractJsonSerializer(type);
Person p = serializer.ReadObject(json) as Person;
Perché non questo?
var serializer = new DataContractJsonSerializer();
Person p = serializer.ReadObject<Person>(json);
Possono ancora usare la riflessione con gli attributi decorati DataContract in base al T
che ho specificato su .ReadObject<T>(json)