Perché DataContractJsonSerializer non include generici come JavaScriptSerializer?

1

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)

    
posta Patrick Magee 26.05.2013 - 04:08
fonte

1 risposta

2

JavaScriptSerializer non sembra essere deprecato, basato su documentazione MSDN corrente . Non era obsoleto con .NET 3 SP1 (vedi commento di Microsoft ). Alcuni esempi del suo utilizzo sono presenti anche nelle attuali pubblicazioni di Microsoft Learning.

Non sono sicuro se l'approccio DataContractJsonSerializer sia necessariamente superiore rispetto all'altro. Ma ovviamente alcuni benchmark potrebbero essere interessanti:)

    
risposta data 25.06.2013 - 15:28
fonte

Leggi altre domande sui tag