0

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

目前,我正在使用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 实例。如何告诉格式化程序或 ApiController(我不知道谁实际创建了实例)使用正确的类型创建正确的实例?

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

提前致谢。

德卢兹

4

1 回答 1

1

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

public void Post(string dataPath, JObject obj)
{
    Type myClass = figureOutMyTypeByParsingThePath(dataPath);
    _dataDict[dataPath] = obj.ToObject(myClass);
}
于 2013-10-04T01:09:31.363 回答