我的在线服务(Azure Web 服务)有一个小型 WinRT 客户端应用程序。服务器向客户端发送一个带有(带有潜在附加元数据)的 JSON 编码对象,客户端的职责是将这些数据正确反序列化为类并将其转发给适当的处理程序。
目前,接收到的对象可以用一个简单的反序列化
TodoItem todo = JsonConvert.DeserializeObject<TodoItem>(message.Content);
但是,可以收到多种类型的物品。所以我目前的想法是这样的:
- 我在标头服务器端包含类型信息,例如“Content-Object:TodoItem”
- 我在客户端定义 TodoItem 的属性(见下文)
- 在收到来自服务器的消息后,我使用我定义的属性找到了类。
- 我用解析的类型调用反序列化方法
(2中提到的属性示例。)
[BackendObjectType="TodoItem"]
public class TodoItem
然而,我对这种方法的问题是反序列化中的泛型类型,因为我无法调用:
Type t = ResolveType(message);
JsonConvert.DeserializeObject<t>(message.Content);
我尝试找到一些解决方案并获取 DeserializeObject 的方法信息并使用反射调用它似乎是要走的路。但是,GetMethod() 在 WinRT 中不存在,我无法找到可用于检索 DeserializeObject 的通用版本的替代方法(因为按名称获取给了我非通用重载)。我不介意使用反射和 GetMethod,因为我可以缓存(?)方法并在每次收到消息时调用它们,而不必每次都解决它。
那么我如何实现后一部分和/或有另一种方法来解决这个问题?