다음 컨트롤러를 사용하여 .NET Core 3.0을 대상으로하는 ASP.NET Core 웹 API 프로젝트가 있습니다.
public class FooController : ControllerBase
{
[HttpPost]
public ActionResult Post(Foo foo) => Ok()
}
Foo
별도의 라이브러리에 다음과 같이 정의됩니다.
public struct Foo
{
public int Bar { get; }
public Foo(int bar) => Bar = bar;
}
다음을 사용하여 콘솔 앱에서 API를 호출합니다.
new HttpClient().PostAsJsonAsync("http://localhost:55555/api/foo", new Foo(1)).Wait();
컨트롤러 방법을 입력 foo.Bar
하면 기본값은 0입니다. 1이 될 것으로 예상합니다.
이것은 .NET Core 2.2에서 예상대로 작동했습니다. JSON deserializer는 속성 이름과 일치하는 매개 변수 이름 (대 / 소문자 구분 안 함)이있는 오버로드 된 생성자를 통해 구조체의 전용 setter가있는 속성을 처리합니다.
기본 구조체와 .NET 코어 3.0이 더 이상 작동하지 않습니다 ( 편집 : 때문 이 아니라 마틴 울리히 지적 ). 그러나와 같은 표준 구조체 유형을 사용하면 DateTime
제대로 작동합니다. DateTime
예를 들어 이미 지원 하는 내 구조체에 추가로 수행해야 할 작업이 있습니까? 이미 아래 코드로 구현 ISerializable
을 시도했지만 Foo
작동하지 않았습니다.
public Foo(SerializationInfo info, StreamingContext context)
{
Bar = (int)info.GetValue("bar", typeof(int));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("bar", Bar, typeof(int));
}
어떤 도움이라도 대단히 감사하겠습니다.
새로운 System.Text.Json API는 읽기 전용 속성의 역 직렬화를 포함하여 Newtonsoft.Json ( "Json.NET")이 수행하는 모든 기능을 지원하지 않습니다 .
이 기능이 필요한 경우 ASP.NET Core 2.2에서 3.0으로 마이그레이션 가이드에 설명 된대로 Newtonsoft.Json을 사용하도록 전환합니다 .
services.AddMvc() .AddNewtonsoftJson();
또는
services.AddControllers() .AddNewtonsoftJson();
DateTime
System.Text.Json
3.0 의 스택에서 이미 알려져 있으며 이에 대한 JsonConverter<T>
구현 도 JsonConverterDateTime
있습니다..
사용자 지정 변환기를 만들고 ASP.NET Core에 등록하려면 https://stackoverflow.com/a/57334833/784387을 참조 하세요.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다