c# - Can I control what subtype to use when deserializing a JSON string? -
i'm working facebook api , it's search method returns json response this:
{ "data": [ { "id": "1", "message": "heck of babysitter...", "name": "baby eating watermelon", "type": "video" }, { "id": "2", "message": "great produce deals", "type": "status" } ] } i have class structure similar this:
[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; } } how can use correct subclass based on type attribute?
if use the
system.web.script.serialization.javascriptserializer you can use overload in constructor add own class resolver:
javascriptserializer myserializer = new javascriptserializer(new facebookresolver()); an example how implement can found here on so: javascriptserializer custom type
but should replace the
"type": "video" part to
"__type": "video" since convention class.
here example:
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); } }
Comments
Post a Comment