json.net 到 System.text.json 对 .net 5 中嵌套类的期望
Posted
技术标签:
【中文标题】json.net 到 System.text.json 对 .net 5 中嵌套类的期望【英文标题】:json.net to System.text.json desiration for nested class in .net 5 【发布时间】:2021-09-03 17:02:12 【问题描述】:我遇到了问题。我已将 Json.net 迁移到 system.text.json。 非嵌套简单类类型的 Json 序列化和反序列化工作正常..
Json 请求:
"args":"pageIndex":1,"pageSize":10,"filteringOptions":[],"sortingOptions":["field":"ain","direction":"ASC"]
对于以下复杂类型的序列化正在出错..
services.AddControllers()
.AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); // Input/Output date format
);
类:
public class SearchPageRequest
public PageSearchArgs Args get; set; = new PageSearchArgs();
public class PageSearchArgs
public int PageIndex get; set;
public int PageSize get; set;
public PagingStrategy PagingStrategy get; set;
public List<SortingOption>? SortingOptions get; set; //Only List are not mapping
public List<FilteringOption>? FilteringOptions get; set;
public class SortingOption
public string Field get; set; = null!;
//[JsonPropertyName("direction")] tested put Json property for all propertie
public SortingDirection Direction get; set;
public int Priority get; set;
public enum SortingDirection
ASC,
DESC
我在 C# 类(Pascal 案例)和 Angular 接口(Camelcase)中使用默认案例。 在 .net 5 和 angular 10 应用程序中。
模型验证出错。
键:“$.args.sortingOptions[0].direction”(驼峰式)
值:无法将 JSON 值转换为 Application.Wrappers.Paging.SortingOption+SortingDirection。路径:$.args.sortingOptions[0].direction |行号:0 | BytePositionInLine:109。
请让我知道..我正在尝试 2 天..来自 angular slickdrid 的数据..如果我必须在 c# 类 itlsef 中修改任何更改
我尝试过的:(在 json.net 中运行良好)
-
Json 属性名我定义为驼峰式
基于错误 $.args.sortingOptions[0].direction 没有映射到方向的 SortingOptions。这是枚举属性。请告诉我替代解决方案?
【问题讨论】:
您为什么不与我们分享您尝试反序列化的原始 json?错误就是它所说的,它无法将 json 值转换为 SortingDirection 枚举的任何值。这可能是因为枚举成员不是您声称的 PascalCase,而是大写。 谢谢..如何使用 Angular 应用程序作为前端获取 rawJson i 使用浏览器网络日志查看请求正文。 这取决于您要达到的目标。如果您想将 .net json 序列化程序设置为不区分大小写,您可以这样做。或者可以选择在您的前端执行此操作。如果你把问题限制在这样的小问题上,你可以使用谷歌来解决它。或者有人可以帮助你。但是,当您的问题需要了解多个框架才能解决时,找到可以提供帮助的人的可能性会下降得很快。 是的,但现在您的排序方向将被忽略。但真正由你来定义“工作”。此外,您可以在 docs.microsoft.com/en-us/dotnet/standard/serialization/… 阅读有关反序列化不区分大小写的字符串和枚举的信息 【参考方案1】:你真的需要将 Json.net 迁移到 system.text.json 吗?
根据https://visualstudiomagazine.com/articles/2020/07/28/json-serializers.aspx
如果您已经在现有项目中使用 Newtonsoft.Json,您 可能不需要切换。如果你绝对需要高 JSON 序列化/反序列化性能,搭配 System.Text。
Json.net 有一些方便的功能,在 System.Text 中没有。最好使用更适合工作的包。
【讨论】:
谢谢...现在我已经解决了使用 json 忽略的问题以上是关于json.net 到 System.text.json 对 .net 5 中嵌套类的期望的主要内容,如果未能解决你的问题,请参考以下文章