无法用System.Text.Json反序列化DateTime、Guid或Enum



我提交了一个bug,但这似乎是一个基本的基本场景,我必须错过一些东西:错误: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库/程序集。只需将它们更改为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; }
}

相关内容

  • 没有找到相关文章

最新更新