我正在使用facebook api,它search method返回一个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());

如何实现这一点的示例可以在此处找到,因此:JavaScriptSerializer with custom Type
但你应该换掉
"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);
    }
}

09-16 19:48