Sja*_*ide 14 c# serialization json
我正在尝试制作一个包含Facebook和Twitter信息的单一数据类.
但在我从Twitter id_str获得的JSON回复中,我需要从FaceBook获得id.
我需要将这两个放入id-string中.
现在我知道[JsonProperty("id_str")]如果我想将Twitters反序列id_str化为我的id-string,我可以使用它.
但是,如果我需要在我的数据类中使用相同的字符串反序列化Facebook id和Twitters id_str,该id怎么办?
我想我用最简单的方式解决了......
public string id_str {
get{return id;}
set{id = id_str;}
}
public string id { get; set; }
Run Code Online (Sandbox Code Playgroud)
简单地添加两个并制作一个,设置另一个..它有效:P有时简单的解决方案是最好的?
不,这是不可能的.
我们来看看Json.NET文档.特别是关于JsonPropertyAttribute类的帮助页面.
报价:
"指示JsonSerializer始终使用指定的名称序列化成员."
它在Newtonsoft.Json命名空间中声明.我们需要确定它是如何声明的.我们来看看CodeSlex上的Json.NET源代码:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property |
AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class JsonPropertyAttribute : Attribute
{
//...
}
Run Code Online (Sandbox Code Playgroud)
猜猜回答了这个问题.该属性的AllowMultiple属性设置为false.因此,您无法使用此属性多次修饰属性,字段或参数.
即使你可以如何期望Json.net找出使用哪个属性?我将分别为Twitter和Facebook创建类型,您可以将收集的JSON数据反序列化.
所以:
Twitter -> JSON -> Twitter specific types
Facebook -> JSON -> Facebook spefic types
Run Code Online (Sandbox Code Playgroud)
然后创建一个应用程序使用的抽象,而不是直接解决这些类型.它们只属于特定的社交媒体实现.
Twitter/Facebook/... speficic types - >您的类型
如果您直接尝试将数据反序列化为"常见类型",那么您将继续苦苦挣扎,因为它们不会100%与接收到的数据保持一致,并且您将最终得到一些时髦,难以维护的反序列化逻辑.
另一个选择是创建自己的自定义Json.NET转换器.
只需为Twitter和Facebook创建转换器,当您反序列化JSON数据时,只需指定要使用的转换器即可.
例如:
MySocialType myType = JsonConvert.DeserializeObject<Mapped>(json,
new TwitterConverter());
Run Code Online (Sandbox Code Playgroud)
无论如何,我会尽量避免使用反序列化逻辑本身污染您的类类型.
| 归档时间: |
|
| 查看次数: |
8316 次 |
| 最近记录: |