2017-11-30 11 views
1

다른 ASP.NET Core 2/Angular 2 응용 프로그램에서 사용하는 ASP.NET Core 2 API C# 프로젝트가 있습니다. API 프로젝트 MVC 서비스 JSON 옵션 ReferenceLoopHandling ~ Ignore을 구성했습니다.MVC AddJsonOptions ReferenceLoopHandling 구성이 적용되지 않았습니다.

services.AddMvc().AddJsonOptions(options => 
    { 
     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
    }); 

그러나, 나는 내 응용 프로그램을 실행할 때 나는 여전히 "자기 참조 루프가 감지 얻을 ... '오류를 내 HTTP GET 방법 중 하나.

을 디버그 모드에서, 나는이 방법에서 일시 정지하는 경우 결과가 직렬화 수동으로 직렬화 예를

?Newtonsoft.Json.JsonConvert.SerializeObject(
    myDataObject, 
    new Newtonsoft.Json.JsonSerializerSettings 
    { 
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore 
    }) 

데이터를 실행하기 전에 예상대로 오류없이 직렬화이다.

왜 서비스 구성 않을 것 이 방법에 적용 할 수 있을까요?

+1

* * 작동해야합니다. 시작 구성과 문제를 일으키는 작업에서 더 많은 코드를 공유해야 할 수도 있습니다. – CalC

답변

3

ASP.NET 코어 MVC는 으로 볼 수있는 JsonSerializerSettings 개체가 있습니다. AddJsonOptions을 호출 할 때 구성한 것입니다. 이 인스턴스에 적용하는 설정은 JsonConvert에서 호출 할 수있는 메서드에는 적용되지 않습니다. 이러한 메서드에 영향을 미치려면 DefaultSettings 속성을 설정해야합니다. 예컨대 : 당신은 당신의 Startup 수업 시간에이 곳을하거나 심지어 당신의 Program 클래스의 수

JsonConvert.DefaultSettings =() => new JsonSerializerSettings 
{ 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
}; 

.

+0

좋아, 내 디버그 문이 동일하지 않습니다. 그러나 클라이언트에서 API에 액세스 할 때 MVC 서비스 구성이 적용되지 않는 문제가 있습니다. 즉, 개체 모델 직렬화가 실패합니다. MVC 서비스 AddJsonOptions 구성이 API 메소드에 적용될 것이라고 생각했습니다. – Craig

+0

이 코드 스 니펫이 문제를 해결하지 * 못했다면 질문에 더 많은 정보가 포함될 가치가 있습니다. 문제가되는 행동은 시작하기에 좋은 곳입니다. –

+0

이후 Postman을 통해 API에 액세스했으며 데이터가 API에 의해 직렬화되어 적용된 옵션과 함께 예상대로 직렬화되어야하므로 직렬화가되어야합니다. 내가 더 많은 정보를 가지고있을 때 나는 다시 게시 할 것이다. – Craig