No, esto no es posible.
Echemos un vistazo a Json.NET documentation. En particular, la página de ayuda sobre la clase JsonPropertyAttribute.
Para citar:
"Instruye al JsonSerializer para siempre serializar el miembro con el nombre especificado."
Está declarado en el espacio de nombres Newtonsoft.Json. Necesitamos determinar cómo se declara. Vamos a echar un vistazo a código fuente del Json.NET en CodePlex:
http://json.codeplex.com/
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property |
AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class JsonPropertyAttribute : Attribute
{
//...
}
Guess que responde a la pregunta. La propiedad AllowMultiple del atributo se establece en falsa. Por lo tanto, no puede decorar una propiedad, campo o parámetro más de una vez con este atributo.
Incluso si pudieras ¿cómo esperas que Json.net descubra qué atributo usar? Crearía tipos para Twitter y Facebook por separado en los que puede deserializar los datos JSON recibidos.
Así:
Twitter -> JSON -> Twitter specific types
Facebook -> JSON -> Facebook spefic types
A continuación, cree una abstracción que utiliza su aplicación en lugar de hacer frente a este tipo directamente. Simplemente pertenecen a una implementación específica de redes sociales.
Twitter/Facebook/... tipos speficic -> Sus tipos
Si intenta deserializar directamente a los datos en sus "tipos comunes", a continuación, sólo se va a seguir luchando porque no se alinean 100% con los datos recibidos y terminará con una lógica de deserialización funky y difícil de mantener.
Otra opción es crear su propio convertidor Json.NET personalizado.
http://geekswithblogs.net/DavidHoerster/archive/2011/07/26/json.net-custom-convertersndasha-quick-tour.aspx
Basta con crear un convertidor para Twitter y Facebook y al deserializar los datos JSON, basta con especificar qué convertidor que desea utilizar.
- TwitterConverter
- FacebookConverter
ej .:
MySocialType myType = JsonConvert.DeserializeObject<Mapped>(json,
new TwitterConverter());
De todos modos me gustaría tratar de evitar la contaminación de los tipos de clase con la lógica de deserialización en sí.
Bueno, yo estaba esperando que simplemente verificaría cualquiera de ellos y usaría el que no es nulo. Creo que tendré que pensar en otra cosa ... ¡Gracias de todos modos! :) –
Creo que la última opción debería funcionar bastante bien. – JefClaes