我正在尝试为 ASP MVC3 编写 Protobuf ValueProviderFactory。我已经成功锻炼了如何添加工厂 https://stackoverflow.com/questions/6885538/adding-custom-valueproviderfactories-to-asp-net-mvc3,但现在我偶然发现了一个更紧迫的问题。
这是当前序列化发生的地方JsonValueProviderFactory.cs
JavaScriptSerializer serializer = new JavaScriptSerializer();
object jsonData = serializer.DeserializeObject(bodyText);
return jsonData;
那么反序列化是在没有任何类型信息的情况下完成的吗?什么样的物体DeserializeObject
返回?动态?它如何知道数据的类型?我希望将 protobuf-net 放在这里,但它显然需要一种类型来发挥其魔力!
我没有查看所有 MVC3 源代码,但我猜测到类型的映射发生在最后阶段,并且无法知道 ValueProviderFactories 中的类型?
我是否必须放弃并在行动上进行转换?
这里有几个问题。
For how JavaScriptSerializer
你应该阅读的作品文档 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx。该类尝试推断基本类型(int、bool、date 等)的类型并返回Dictionary<string, object>
对于更复杂的情况。此外,如果 JSON blob 包含名为“__type”的特殊属性,则反序列化器将尝试创建该类型的对象。
现在介绍一下 MVC 中的工作原理。将请求中的值映射到控制器中使用的对象实例的过程称为模型绑定。它分为两个组件:ModelBinder 和 ValueProviders。模型绑定器知道目标类型(例如产品),尝试创建它的实例,然后使用请求中的值填充其属性。它通过询问 ValueProviders 来实现这一点。例如,要在 Product 实例上设置 Name 属性,它会向值提供者询问“Name”的值。值提供者按顺序查询并返回匹配项(来自查询字符串、发布数据、JSON 请求正文等)。
网络上有很多关于这方面的资源,但简而言之,价值提供者不应该真正关心类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)