2013-06-10 3 views
4

와 모델 매개 변수에 실패합니다. 그것은 기본적으로 Json.NET을 사용하는 것, 또한, 내가 사용할 수 없습니다 설정 UseDataContractJsonSerializer = 사실 원인 나는 여기 Web.Api의 직렬화 내가 URL 인코딩 된 데이터를 매개 변수로 모델 [AccountLinkRequest]을 하나의 방법을 가지고 다른 이름

[HttpPost] 
public SomeResponse Link(AccountLinkRequest request) 
{ 
    if (request.CustomerId == null) 
     throw new Exception("Deserialization error here, pls help!"); 

    // other actions 
} 

내 모델 클래스 (다른 방법의) 일반적인 출력 응답 모델로 한 :

[DataContract] 
[JsonObject] 
public class AlertAccountLinkRequest 
{ 
    [DataMember(Name = "id")] 
    public string id { get; set; } 

    [DataMember(Name = "customer_id")] 
    [JsonProperty("customer_id")] 
    public string CustomerId { get; set; } 
} 

문제 : request.CustomerId가에 allways 입니다. 이 요청은 매우 간단하다 :

web_service_URL/링크 CUSTOMER_ID = CUSTOMER_ID & ID = 아이디 (URL 인코딩)

내가 대신 고객 ID의 CUSTOMER_ID를 사용하는 경우, 모든 것이 잘 될 것입니다,하지만 난 jedy에있어? -방법. 고맙습니다!

답변

1

는 그것을 달성하는 방법을 간단한 대답이 없습니다. 복합 형은 간단

  • 사용 할 수 있도록하는 TypeConverter를 사용

    1. 수동으로 작업
    2. 내부의 구문 분석 함수를 호출 자세한 내용은이를 참조하십시오 :

      How to bind to custom objects in action signatures in MVC/WebAPI

      요약 사용자 정의 모델 바인더 그래서

    , 당신이 경우 채소에 대한 nce는 일부 속성을 소비 할 수있는 'SmartBinder'를 만들면 원하는 것을 얻을 수 있습니다. 상자 FO 아웃이에 대한 기능, 단지 명명 규칙 ...

  • +0

    Radim이없는, 응답을 주셔서 감사합니다. 나는 여전히 DataMember/JsonProperty가 그것을 제공하지 않는다고 믿을 수 없다. ORM과 마찬가지로 열 이름 대신 속성 이름을 정의 할 수 없습니다. 는 Btw은 Json.NET 5.0 업데이트가 있었다, 그러나 아무것도 우리가 ModelBinder를 얘기,이 경우 – EvgeniyK

    +1

    를 변경하지 않습니다. 우리는 쿼리 문자열의 일부인 쿼리를 변경하여 개체로 변환하려고합니다. 위에서 언급 한 3 가지 방법 만 사용할 수 있습니다. 당신이 말하는 것은 신체의 파싱입니다. 이를 위해 MediaFormatters를 사용합니다. 그리고 이것들은 매우 강력하고 조정 가능하며 확장 가능합니다 ... 그래서 가장 큰 차이가 있습니다. 검색어 대 BODY. 요청 본문에 JSON 속성 (예 :'[JsonProperty (PropertyName = '')])을 사용할 수 있습니다.이 경우가 아닙니다. 내가 아는 나쁜 소식 ( –

    +0

    이제 보니, 고마워요! – EvgeniyK