편집 : 답변을 찾았습니다 (설명에 있음).JSON에서 POST를 ApiController에 보내십시오.
현재 서버의 메모리에있는 객체에 액세스하려면 System.Web.Http.ApiController
을 사용하고 있습니다. 이러한 개체는 모든 유형을 가질 수 있습니다. (. 예제 코드 안 전체 소스 코드를)
public class DataController : ApiController
{
Dictionary<String, Object> _dataDict;
public object Get(string dataPath)
{
Object result = _dataDict[dataPath];
return result;
}
}
이 웹 API를 통해 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;
}
}
개체는 실제 deserialize 된 개체 대신 동적 개체가됩니다. 다음과 같은 구체적인 방법을 구현하십시오.
public object Post(string dataPath, MyClass instance)
{
_dataDict[dataPath] = instance;
}
잘 작동합니다. 슬프게도, 런타임에 사용 된 모든 유형을 모르지만 dataPath를 분석하여 어떤 유형인지 알고 런타임에 Type 인스턴스를 얻을 수 있습니다. 올바른 형식을 사용하여 올바른 인스턴스를 만들기 위해 포맷터 또는 ApiController (실제로 인스턴스를 만드는 사람을 알 수 없음)에게 어떻게 알릴 수 있습니까?
나는 System.Net.Http.Formatting.JsonMediaTypeFormatter
을 사용하고 있습니다.
미리 감사드립니다.
devluz
나는 내 자신의 질문에 대답하지만, 해결책을 발견하지 못할 : 그것은 실제로하는 jobject가 아닌 동적 객체입니다. 난처한 대답은 다음과 같습니다. public void Post (string dataPath, JObject obj) { 유형 myClass = figureOutMyTypeByParsingThePath (dataPath); _dataDict [dataPath] = obj.ToObject (myClass); } 그리고 그걸 알아 내는데 몇 시간이 걸렸습니다. – luz
시간을 낭비하게되어 죄송합니다. :) 감사합니다. – luz