2013-10-03 4 views
0

Редактировать: Найден ответ (в комментариях).Отправка POST в JSON на ApiController

В настоящее время я использую System.Web.Http.ApiController для доступа к некоторому объекту в памяти сервера. Эти объекты могут иметь любой тип.

Я использую следующий контроллер апи, чтобы получить их: (. Пример кода не полный исходный код)

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

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

Это прекрасно работает, чтобы получить все мои объекты в формате JSON через веб-API. Проблема заключается в отправке новых объектов с использованием 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.

Заранее спасибо.

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); 
} 
Смежные вопросы