.net - 创建需要类型信息的 MVC3 ValueProviderFactories?

标签 .net asp.net-mvc asp.net-mvc-3 protobuf-net

我正在尝试为 ASP MVC3 编写 Protobuf ValueProviderFactory。我已经成功锻炼出how to add the factories ,但现在我偶然发现了一个更紧迫的问题。 这是 JsonValueProviderFactory.cs

中当前序列化发生的位置
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    object jsonData = serializer.DeserializeObject(bodyText);
    return jsonData;

那么反序列化是在没有任何类型信息的情况下完成的吗? DeserializeObject 返回什么类型的对象?动态?它如何知道数据的类型?我希望将 protobuf-net 放在这里,但它显然需要一种类型来发挥其魔力!

我没有查看所有 MVC3 源代码,但我猜类型的映射发生在最后阶段,并且无法知道 ValueProviderFactories 中的类型?

我是否必须放弃并在操作中进行转换?

最佳答案

这里有几个问题。

如何JavaScriptSerializer你应该阅读documentation 。该类尝试推断基本类型(int、bool、date 等)的类型并返回 Dictionary<string, object>对于更复杂的情况。此外,如果 JSON blob 包含名为“__type”的特殊属性,则反序列化器将尝试创建该类型的对象。

现在我们来了解一下它在 MVC 中的工作原理。将请求中的值映射到 Controller 中使用的对象实例的过程称为模型绑定(bind)。它分为两个组件:ModelBinder 和 ValueProviders。模型绑定(bind)器知道目标类型(例如产品),尝试创建它的实例,然后使用请求中的值填充其属性。它通过询问 ValueProviders 来实现这一点。例如,要在 Product 实例上设置 Name 属性,它会向值提供者询问“Name”的值。值提供者按顺序查询并返回匹配项(来自查询字符串、发布数据、JSON 请求正文等)。

网络上有很多与此相关的资源,但总而言之,值(value)提供者不应该真正关心类型。

关于.net - 创建需要类型信息的 MVC3 ValueProviderFactories?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902885/

相关文章:

.net - Facebook 和 asp.net 成员(member)资格的整合

c# - 我如何模拟 Directory.GetFiles?

c# - JqG​​rid 搜索选项 : toolbarsearch vs standard search window

asp.net-mvc-3 - RemoteAttribute 验证器不会触发服务器端

javascript - 将 UTC 日期时间从服务器转换为网页上的本地日期时间

asp.net - MVC ValidateAntiForgeryToken 多标签问题

c# - Entity Frameworks 插入已插入的相关项

html - 匹配按钮的外观

c# - 程序集 'SomeAssembly, uses ' System.Web.Mvc,Version=4.0.0.0,其版本高于引用的程序集 'System.Web.Mvc,Version 3.0.0.0

c# - 如何找到 visual studio 正在寻找程序集引用的位置