2014-09-11 4 views
0

JSON 매개 변수를 전달하는 웹 API 후 조치를 호출 중입니다. 내 사용자 정의 모델은 다음과 같다 :JSON WebAPI 매개 변수의 직렬화

[Serializable] 
public class Model 
{ 
    public int? prop1 {get; set;} 
    public bool prop2 {get; set;} 
} 

웹 API는 다음과 같습니다

public void Post(Model model) 
{ 
    if (model != null && model.prop1 ==5) 
{ 
// Do something 
} 
} 

내가 클라이언트에서 전달하는 JSON은 다음과 같습니다

var value = { 
prop1: 4, 
prop2: true 
}; 

그리고 클라이언트에서 AJAX 호출은 다음과 같습니다

.ajax('/api/MyController', { 
type: "POST", 
contentType: "application/json", 
data: JSON.stringify(value), 
success:function(data){ 
alert(Success); 
} 
}); 

howev 모델 속성의 바인딩은 WebAPI 작업에서 작동하지 않습니다. "모델"매개 변수는 인스턴스화되어 돌아옵니다 (null이 아님). 그러나 내부의 모든 속성은 클라이언트에서 전달한 값이 아니라 기본값입니다. Model 클래스에서 [Serializable] 특성을 제거하면 올바르게 작동합니다. 이 개체는 SQL 기반 세션에 저장되므로이 특성을 제거 할 수 없습니다. [Serializable] 특성을 제거하지 않고이 바인딩을 사용할 수있는 방법은 무엇입니까

+1

[Serializable' 속성을 무시하도록 JsonSerializer를 구성하십시오.] (http://stackoverflow.com/a/22486064/997668) – Michael

+1

가능한 복제본 [.NET WebAPI Serialization k \ _BackingField Nastiness] (http : /stackoverflow.com/questions/12334382/net-webapi-serialization-k-backingfield-nastiness) –

답변

0

[Serializable]을 모델에서 제거하면됩니다. 왜 그런지는 모르겠지만 클래스가 Serializable로 표시되면 작동하지 않습니다.

+0

나는 속성을 추가 한 적이 없으며 제대로 작동합니다. –

관련 문제