不,这是不可能的。
让我们看一下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 确定要使用哪个属性?我会分别为 Twitter 和 Facebook 创建类型,您可以将接收到的 JSON 数据反序列化到其中。
所以:
Twitter -> JSON -> Twitter specific types
Facebook -> JSON -> Facebook spefic types
然后创建一个您的应用程序使用的抽象,而不是直接寻址这些类型。它们只是属于特定的社交媒体实现。
Twitter / Facebook / ...特定类型->您的类型
如果您直接尝试将数据反序列化为“常见类型”,那么您将继续挣扎,因为它们与接收到的数据没有 100% 对齐,您最终会遇到一些时髦、难以维护的反序列化逻辑.
另一种选择是创建您自己的自定义 Json.NET 转换器。
http://geekswithblogs.net/DavidHoerster/archive/2011/07/26/json.net-custom-convertersndasha-quick-tour.aspx
只需为 Twitter 和 Facebook 创建一个转换器,当您反序列化 JSON 数据时,只需指定您要使用的转换器。
例如:
MySocialType myType = JsonConvert.DeserializeObject<Mapped>(json,
new TwitterConverter());
无论如何,我会尽量避免用反序列化逻辑本身污染你的类类型。