【发布时间】:2012-05-28 11:51:11
【问题描述】:
我正在尝试自定义实现 MediaTypeFormatter,但始终使用类型 IKeyValueModel 调用方法 bool CanReadType(Type type),而不是我的类型 MyProduct。
在我的 API 控制器中,我有:
[HttpPost]
public Task Save(MyProduct product)
我看过一些例子(example 1,example 2),我也试过代码:
protected override bool CanReadType(Type type)
{
if (type == typeof(IKeyValueModel))
return false;
return true;
}
然后我得到一个“MissingMethodException:没有为此对象定义无参数构造函数”,因为我的模型类型没有无参数构造函数。所以看起来因为CanReadType 向IKeyValueModel 返回false,框架使用了另一个媒体类型格式化程序。实际上,方法OnReadFromStreamAsync 永远不会被命中。
我希望能够控制我的模型如何反序列化,我想获得真实类型而不是IKeyValueModel。
这在带有模型绑定器的 MVC 中已经很有效了。
干杯。
2012 年 5 月 29 日更新:
如果我删除默认的 json 格式化程序,它会起作用:
public static void RegisterApis(HttpConfiguration config)
{
config.Formatters.Clear();
但是我想保留两者,我怎么能指出我想使用哪一个?
问候。
【问题讨论】:
-
为什么需要自定义
MediaTypeFormatter? -
尝试最新代码(夜间构建),当前源中没有 IKeyValueModel。它已被团队删除/删除。 aspnetwebstack.codeplex.com/SourceControl/network/forks/…
-
@Aliostad 我需要一个自定义 MediaTypeFormatter 来控制我的对象如何序列化和反序列化为 JSON。
-
@user960567 所以我们可以期待版本中的重大变化?
-
@NullOrEmpty,henrik 一直在帮助我们,blogs.msdn.com/b/henrikn
标签: asp.net-mvc-4 asp.net-web-api mediatypeformatter