【发布时间】: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/… 阅读有关反序列化不区分大小写的字符串和枚举的信息
标签: c# angular asp.net-core