使用xmlmediatypeformatter在PUT / POST / PATCH的操作方法中使用“动态/对象”数据类型

时间:2013-03-23 20:42:11

标签: asp.net-web-api

我有以下行动方法:

  public HttpResponseMessage Put(int id, dynamic item)
    {
    }
    public HttpResponseMessage Post(object item)
    {            
    }
    public HttpResponseMessage Patch(intid, dynamic item)
    {            
    }

如果我使用“application / json”的内容类型POST / PUT / PATCH一个项目,我在上面的方法中得到一个非空项目,表示json有效负载的keyvalue对,但是,如果我改变了内容类型到“application / xml”并在正文中发送XML有效负载而不是JSON有效负载我得到该项的“null”。

为什么?

1 个答案:

答案 0 :(得分:1)

传递JSON时它起作用的原因是因为WebAPI使用JSON.NET作为其默认的JSON序列化程序。 JSON.NET支持动态对象。

WebAPI默认使用DataContractSerializer进行XML序列化。不幸的是,它不支持动态对象。我猜这是导致你的问题。基类库提供了另一个名为XmlSerializer的xml序列化程序,它也可以与WebAPI一起使用,但它也不支持动态对象。