2014-02-16 4 views
27

global.asax에 이와 같은 전역 시리얼 라이저 설정을 설정하려고합니다.기본 글로벌 json 시리얼 라이저 설정하기

var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
formatter.SerializerSettings = new JsonSerializerSettings 
{ 
    Formatting = Formatting.Indented, 
    TypeNameHandling = TypeNameHandling.Objects, 
    ContractResolver = new CamelCasePropertyNamesContractResolver() 
}; 

다음 코드를 사용하여 개체를 serialize 할 때 전역 serializer 설정이 사용되지 않습니까?

return new HttpResponseMessage(HttpStatusCode.OK) 
{ 
    Content = new StringContent(JsonConvert.SerializeObject(page)) 
}; 

글로벌 시리얼 라이저 설정을 이와 같이 설정할 수 없습니까, 아니면 누락 되었습니까?

답변

56

설정하면 JsonConvert.DefaultSettings 트릭을했습니다.

JsonConvert.DefaultSettings =() => new JsonSerializerSettings 
{ 
    Formatting = Formatting.Indented, 
    TypeNameHandling = TypeNameHandling.Objects, 
    ContractResolver = new CamelCasePropertyNamesContractResolver() 
}; 
+1

"GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings'을 동일한 개체에 설정해야이 구성이 모든 곳에서 사용되도록해야했습니다. (이 경우 : webapi에 의해 JsonConvert를 통해 수동으로 호출) –

+0

이것은 전혀 작동하지 않습니다. 설정이 완전히 무시됩니다. – jwize

1

어디서 시리얼 라이저를 설정할 것입니까? 그러나 요청 된 컨텐트 유형 JSON을 사용하여 사이트에 대한 요청이 이루어지면 해당 serializer가 사용됩니다. SerializeObject를 호출 할 때 사용되는 설정의 일부가 아닙니다. 이 문제를 해결하려면 속성을 통해 global.asax로 정의 된 JSON 직렬화 설정을 노출해야합니다.

public static JsonSerializerSettings JsonSerializerSettings 
{ 
    get 
    { 
     return GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings; 
    } 
} 

그리고 당신의 컨트롤러 내에서 직렬화를 수행 할 때 직렬화 설정을 설정하려면이 속성을 사용 :

return new HttpResponseMessage(HttpStatusCode.OK) 
{ 
    Content = new StringContent(JsonConvert.SerializeObject(page, WebApiApplication.JsonSerializerSettings)) 
}; 
2

그냥 당신이 또한 컨텐츠 협상 응답을 반환 할 수 있도록 액션에서 다음을 수행 포맷터 설정을 적용 할 수 있습니다.

return Request.CreateResponse(HttpStatusCode.OK, page); 
+0

매력처럼 작동했는데, 내 솔루션에서했던 것처럼'Request.CreateResponse'를 사용하지 않고'새로운 HttpResponseMessage'를 작성하여 장단점이 있습니까? – Marcus

+3

예, 내용 협상이 느슨 할 것입니다. 예를 들어 요청이'application/xml'으로 오면 여전히 json 데이터를 돌려 보낼 것입니다 ... –

관련 문제