将 JSON 格式的 POST 发送到 ApiController

本文关键字:ApiController POST JSON 格式 | 更新日期: 2023-09-27 18:33:54

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

目前,我正在使用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;
    }
}

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

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

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

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

提前谢谢。

德夫卢兹

将 JSON 格式的 POST 发送到 ApiController

好吧,

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

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