2017-03-08 1 views
1

I 간단한 클래스 경우 :Newtonsoft 직렬화

public class UserId 
{ 
    public string Id { get; set; } 
} 

및 I 출력 임) (HttpRequest.CreateResponse에 건네

{ "id": "1234bcf6678" } 

그러나, I를 사용하는 경우

"{ \"id\": \"1234bcf6678\" }" 

내가 두 번째는 JSON 문자열을 효과적으로 것을 이해하지만 어떻게 내가 일 사용하십시오 JsonSerializer 내가 얻을 e JsonSerializer를 호출하고 첫 번째 출력을 얻는 방식으로 HttpRequest.CreateResponse()에 결과를 전달합니다. 이스케이프 된 따옴표 없음)?

거기에 관련 질문이 있지만 정확히 어떤 일반 목록 및 파생 된 개체를 serialize 처리 할 수 ​​있기 때문에 Newtonsoft serializer를 사용하고 싶습니다.

추가 컨텍스트의 경우 Azure 함수에서이 작업을 수행하고 있음을 알고 있어야합니다. 웹 API에는 System.Web.Http.GlobalConfiguration이 있지만 사용할 수있는 기능은없는 것으로 나타났습니다.

+0

ASP.Net은 Json.net을 내부적으로 사용하며 응용 프로그램 시작시 구성 할 수 있습니다. ASP.Net이 올바른 결과를 리턴하지 못하는 상황에 대해 더 구체적으로 설명 할 수 있습니까? –

+0

방금 ​​편집했습니다. 이것은 Azure 함수 안에 있으므로 Web API에서와 같이 GlobalConfiguration을 통해 동일한 대체 가능성을 가질 수 있는지 확신 할 수 없습니다. – user1200984

답변

1

JsonSerializer를 사용하여 결과 문자열을 반환하면 Json 으로 다시 serialize됩니다.. HttpRequest.CreateResponse() 확장 방법을 무시하고 수동으로 응답을 만들어야합니다. 그러면 콘텐츠와 콘텐츠 유형을 직접 설정할 수 있습니다. 도움이되는 출발점은 source code for CreateResponse (332 줄 부근)입니다. ObjectContent<T>을 사용하는 대신 StringContent을 사용하고 미디어 유형은 'application/json'입니다.

+0

감사합니다. Andrew, 합리적인 방법으로 들립니다. 그것은 나의 하루의 끝이다. 그래서 나는 내가 나중에 필요로하는 것을 얻었을 때 내가 나중에 시험해보고, 대답하는 것을 표시 할 것이다. – user1200984

+0

가만히 두지 않고 긴장을 풀 수 없습니다. 해결책은 다음과 같습니다. var response = new HttpResponse (HttpStatusCode.OK); response.Content = new StringContent (에서의 출력); 반송 응답; 포인터 주셔서 감사합니다. – user1200984

+0

그냥 머리 위로 올리면 미디어 유형을 'application/json'으로 명시 적으로 설정할 수 있습니다. StringContent가 'application/text'를 듣는 것으로 확신합니다. 예를 들어, json을 사용하여 출력을 소비하는 경우, 자동으로 json을 구문 분석하고 문자열이 아닌 객체를 반환하므로 도움이됩니다. –