2013-10-03 51 views
0

编辑:找到答案(在评论中)。发送POST到JSON到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; 
    } 
} 

这正常通过网络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实例。如何使用正确的Type来告诉格式化程序或ApiController(我不知道是谁创建实例)以创建正确的实例?我正在使用System.Net.Http.Formatting.JsonMediaTypeFormatter

在此先感谢。

devluz

+0

我不能回答我的问题,但找到了解决办法: 它实际上是一个JObject,而不是一个动态对象。尴尬的答案是: public void Post(string dataPath,JObject obj) { 类型myClass = figureOutMyTypeByParsingThePath(dataPath); _dataDict [dataPath] = obj.ToObject(myClass); } 而我需要几个小时才能弄清楚...... – luz

+0

对不起,浪费你的时间:)谢谢 – luz

回答

1

那么确定它实际上是一个JObject而不是动态对象。令人尴尬的回答是:

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