簡體   English   中英

我可以控制反序列化JSON字符串時要使用的子類型嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM