2013-10-03 52 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); 
}