나는 버그를 제출했지만 이것은 내가 뭔가를 놓치고 있어야 할 기본적인 기본 시나리오처럼 보인다 : 버그 : https://github.com/dotnet/runtime/issues/48202
System.Text.Json을 사용하여 DateTime, Guid 또는 Enum을 역 직렬화 할 수 없습니다.
다음은 내가 예상하는 방식을 재현하기위한 매우 최소한의 XUnit 테스트이지만 실패합니다.
using System;
using System.Text.Json;
using Xunit;
namespace Example.Tests
{
public class UnitTest1
{
[Fact]
public void GuidsAndDateTimesNotSerialized()
{
var post = new Post {
AuthorId = Guid.NewGuid(),
Created = DateTime.UtcNow,
Title = "test title",
Path = "test-title",
PostStatus = PostStatus.Published,
Description = "this is a test",
};
var json = JsonSerializer.Serialize(post);
var result = JsonSerializer.Deserialize<Post>(json);
Assert.Equal(post.Created, result.Created);
Assert.Equal(post.AuthorId, result.AuthorId);
Assert.Equal(post.PostStatus, result.PostStatus);
}
}
public class Post
{
public Guid AuthorId { get; internal set; }
public string Title { get; set; }
public string Path { get; set; }
public string Description { get; set; }
public PostStatus PostStatus { get; internal set; }
public DateTime Created { get; internal set; }
}
public enum PostStatus
{
Draft,
Published
}
}
System.Text.Json을 사용하여 내가 누락 된 것이 있습니까?
내 생각 엔 속성 세트 internal
는 JSON 라이브러리 / 어셈블리에 액세스 할 수 없습니다. setter로 변경 public
( internal
액세스 수정 자 제거 )하고 다시 시도하십시오.
JSON DTO는 단순 클래스 여야하며 항상 기본 생성자가 있어야합니다.
public class Post
{
public Guid AuthorId { get; set; }
public string Title { get; set; }
public string Path { get; set; }
public string Description { get; set; }
public PostStatus PostStatus { get; set; }
public DateTime Created { get; set; }
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다