![](/img/trans.png)
[英]How to know what type to cast a JObject to when deserializing a JSON string
[英]Can I control what subtype to use when deserializing a JSON string?
我正在使用Facebook API,它的搜索方法返回一個JSON響應,如下所示:
{
"data": [
{
"id": "1",
"message": "Heck of a babysitter...",
"name": "Baby eating a watermelon",
"type": "video"
},
{
"id": "2",
"message": "Great Produce Deals",
"type": "status"
}
]
}
我有一個類似於這樣的類結構:
[DataContract]
public class Item
{
[DataMember(Name = "id")]
public string Id { get; set; }
}
[DataContract]
public class Status : Item
{
[DataMember(Name = "message")]
public string Message { get; set; }
}
[DataContract]
public class Video : Item
{
[DataMember(Name = "string")]
public string Name { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
}
[DataContract]
public class SearchResults
{
[DataMember(Name = "data")]
public List<Item> Results { get; set; }
}
如何根據該type
屬性使用正確的子類?
如果你使用
System.Web.Script.Serialization.JavaScriptSerializer
你可以在構造函數中使用重載來添加你自己的類解析器:
JavaScriptSerializer myserializer = new JavaScriptSerializer(new FacebookResolver());
有關如何實現此功能的示例,請參見SO: 帶自定義類型的JavaScriptSerializer
但是你應該更換
"type": "video"
部分到
"__type": "video"
因為這是班級的慣例。
這是一個例子:
public class FacebookResolver : SimpleTypeResolver
{
public FacebookResolver() { }
public override Type ResolveType(string id)
{
if(id == "video") return typeof(Video);
else if (id == "status") return typeof(Status)
else return base.ResolveType(id);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.