2011-02-03 15 views
8

ho notato che con il DataContractJsonSerializer la stringa JSON serializzato a volte includere le informazioni sul tipo sotto forma diquando DataContractJsonSerializer include le informazioni sul tipo?

{"__type":"MyClass:#MyNamespace", ... } 

sulla base di mie osservazioni mi sembra di fare solo questo quando è serializzare un tipo di base, ma un noto sub il tipo è passato invece che ha senso, ma non ho trovato alcuna documentazione ufficiale per confermare questo o comunque comunque per forzare il serializzatore a mostrare costantemente questo comportamento ogni volta che incontra un tipo personalizzato.

Qualcuno può confermare se le mie osservazioni sono corrette? Ancora meglio, se si conosce un modo per indicare al serializzatore di serializzare sempre le informazioni sul tipo per i tipi personalizzati, se questo è possibile?

Grazie,

risposta

14

In realtà, è possibile forzare il serializzatore per sempre costantemente emettere __type informazioni.

Se si utilizza il serializzatore standalone, utilizzare lo constructor overload che accetta l'argomento "alwaysEmitTypeInformation". Passa vero.

Se si utilizza DataContractJsonSerializerOperationBehavior, impostare la stessa proprietà su tale attributo su true. Credo che puoi farlo anche via config.

Infine, vedere la sezione "Quando vengono emessi suggerimenti tipo" a http://msdn.microsoft.com/en-us/library/bb412170.aspx per una spiegazione più dettagliata.

Spero che questo aiuti!

+0

fantastico! questo è esattamente quello che stavo cercando, non ho nemmeno realizzato che uno dei sovraccarichi del costruttore ti permette di specificare se emettere sempre le informazioni sul tipo, grazie per averlo indicato! – theburningmonk

+0

Sì, grazie. Stavo sbattendo la testa a come avrei potuto ottenere JSON per serializzare sul tipo completo quando viene passato un tipo di base e ho visto questo. Rende molto più facile di una soluzione hacky che potrei inventare. – Telavian

Problemi correlati