将JSON中的POST发送到ApiController

时间:2013-10-03 07:35:25

标签: c# asp.net object post asp.net-apicontroller

编辑:找到答案(在评论中)。

目前,我使用System.Web.Http.ApiController访问服务器内存中的某个对象。这些对象可以是任何类型。

我使用以下api控制器来接收它们: (示例代码。不是完整的源代码)

public class DataController : ApiController
{
    Dictionary<String, Object> _dataDict;

    public object Get(string dataPath)
    {
        Object result = _dataDict[dataPath];
        return result;
    }
}

这可以通过web api接收JSON中的所有对象。问题是使用POST发送新对象:

public class DataController : ApiController
{
    Dictionary<String, Object> _dataDict;

    public object Get(string dataPath)
    {
        Object result = _dataDict[dataPath];
        return result;
    }
    public void Post(string dataPath, Object obj)
    {
        _dataDict[dataPath] = obj;
    }
}

Object将是一个动态对象,而不是真正的反序列化对象。实施具体方法,例如:

public object Post(string dataPath, MyClass instance)
{
    _dataDict[dataPath] = instance;
}

工作正常。遗憾的是,我不知道所有在运行时使用的类型,但我通过分析dataPath知道它是哪种类型,并且可以在运行时获取Type实例。如何使用正确的Type来创建格式化程序或ApiController(我不知道谁实际创建实例)来更正实例?

我正在使用System.Net.Http.Formatting.JsonMediaTypeFormatter

提前致谢。

devluz

1 个答案:

答案 0 :(得分:1)

好吧,它实际上是一个JObject,而不是一个动态对象。令人尴尬的答案是:

public void Post(string dataPath, JObject obj)
{
    Type myClass = figureOutMyTypeByParsingThePath(dataPath);
    _dataDict[dataPath] = obj.ToObject(myClass);
}