いいえ、これは不可能です。
Json.NETのドキュメントを見てみましょう。特に、JsonPropertyAttributeクラスに関するヘルプページ。
引用するには:
「指定された名前のメンバーを常にシリアル化するようにJsonSerializerに指示します。」
Newtonsoft.Json名前空間で宣言されています。それがどのように宣言されるかを決定する必要があります。CodePlexでJson.NETのソースコードを見てみましょう。
http://json.codeplex.com/
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property |
AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class JsonPropertyAttribute : Attribute
{
//...
}
それが質問に答えると思います。属性のAllowMultipleプロパティがfalseに設定されています。したがって、この属性を使用してプロパティ、フィールド、またはパラメータを複数回装飾することはできません。
Json.netがどの属性を使用するかをどのように判断できると思いますか?受信したJSONデータを逆シリアル化できるTwitterとFacebookのタイプを別々に作成します。
それで:
Twitter -> JSON -> Twitter specific types
Facebook -> JSON -> Facebook spefic types
次に、これらのタイプに直接対処する代わりに、アプリケーションが使用する抽象化を作成します。それらは特定のソーシャルメディアの実装に属しているだけです。
Twitter / Facebook/...特定のタイプ->あなたのタイプ
データを「一般的なタイプ」に直接逆シリアル化しようとすると、受信したデータと100%整列しておらず、ファンキーで保守が難しい逆シリアル化ロジックが発生するため、苦労し続けることになります。 。
もう1つのオプションは、独自のカスタム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());
とにかく、逆シリアル化ロジック自体でクラスタイプを汚染しないようにします。