Нет, это невозможно.
Давайте посмотрим на Json.NET documentation. В частности, справочная страница о классе JsonPropertyAttribute.
Цитирую:
«Инструктирует JsonSerializer всегда сериализовать элемент с указанным именем.»
Он объявлен в пространстве имен Newtonsoft.Json. Нам нужно определить, как это объявлено. Давайте посмотрим на исходный код Json.NET на CodePlex:
http://json.codeplex.com/
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property |
AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class JsonPropertyAttribute : Attribute
{
//...
}
Угадайте, что отвечает на вопрос. Свойству атрибута AllowMultiple присвоено значение false. Таким образом, вы не можете украсить свойство, поле или параметр более одного раза этим атрибутом.
Даже если бы вы могли ожидать, что Json.net выяснит, какой атрибут использовать? Я бы создал типы для Twitter и Facebook отдельно, в которые вы можете десериализовать полученные данные JSON.
Итак:
Twitter -> JSON -> Twitter specific types
Facebook -> JSON -> Facebook spefic types
Затем создать абстракции, которые ваше приложение использует вместо решения этих типов непосредственно. Они просто принадлежат к реализации определенных социальных сетей.
Twitter/Facebook/... speficic типы -> Ваши типы
Если вы сразу попытаться десериализации данных в ваших «общих типов», то вы просто собираетесь держать изо всех сил, потому что они не совпадают 100% с полученными данными, и вы столкнетесь с какой-то напуганной, труднодержащей логикой десериализации.
Другой вариант - создать собственный конвертер Json.NET.
http://geekswithblogs.net/DavidHoerster/archive/2011/07/26/json.net-custom-convertersndasha-quick-tour.aspx
Просто создать конвертер для Twitter и Facebook, и когда вы десериализации данные в формате JSON, просто указать, какой конвертер вы хотите использовать.
- TwitterConverter
- FacebookConverter
т.д .:
MySocialType myType = JsonConvert.DeserializeObject<Mapped>(json,
new TwitterConverter());
Во всяком случае я хотел бы попробовать, чтобы избежать загрязнения ваших типов классов с самой десериализации логикой.
Ну, я надеялся, что это будет просто проверять один из них и использовать тот, который не является нулевым. Думаю, мне нужно придумать что-то еще ... Спасибо в любом случае! :) –
Я думаю, что последний вариант должен работать довольно хорошо. – JefClaes