2017-03-05 1 views
0

웹 API 프로젝트에서 작업 중이며 데이터베이스 작업을 수행하는 데 막대한 작업을 사용하고 있습니다. 내 컨트롤러에서 Post 메서드가 동적 개체를 받아서 Massive Insert 메서드에서 직접 사용할 수있게하려고합니다. 웹 API 메서드에서 동적 매개 변수 사용

public class LinkController : ApiController 
{ 
    public IHttpActionResult Post(dynamic link) 
    { 
     dynamic model = new Massive.DynamicModel("main", tableName: "Links", primaryKeyField: "Id"); 
     return Ok(model.Insert(link)); 
    } 
} 

그리고 POST에

다음과 같은 JSON이 전송 요청 :

{ 
    "Name":"StackOverflow", 
    "Url":"http://www.stackoverflow.com", 
    "Description":"My most visited web site!", 
    "FolderId":2 
} 

내 문제는 방법 JSON.Net이 JSONs를 직렬화 복원합니다. Post 메서드가 호출 될 때 link 매개 변수는 예상대로 의 4 가지 속성을 갖지만 Newtonsoft.Json.Linq.JValue 형식의 일부 기본 형식 (Name에 대한 예제 문자열)이 아니며 Massive는 JValue 개체를 처리 할 수 ​​없습니다.

사용자 지정 JsonConverter를 만들고 웹 API 모델 바인딩을 조정하여 매개 변수에 해당 속성의 기본 형식을 지정해야합니다.

답변

0

당신이 ExpandoObject로 DTO들 직렬화 복원됩니다 할 수있는 최선 : 당신은 그들이 .NET의 CLR 유형이있는 일반 클래스에서 디자인 된 그것으로 그 속성에 액세스하는 동안

// config.GetType() == typeof(HttpConfiguration) 
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new ExpandoObjectConverter()); 

그것은 여전히 ​​동적 객체입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시도했지만 불행히도 아무것도 바뀌지 않았다. –

+0

@ FarzanHajian 이것이 불가능한 일이다. 이것이 내가이 일을하기 위해 내 자신의 WebAPI를 구성하는 방법이다. –