C# 在ASP.NET Core 3.1中使用Newtonsoft.Json时,自定义JsonConverter属性不适用于Json.Serialize()
我想使用Newtonsoft Json.NET在ASP.NET Core 3.1应用程序中执行反序列化。我在启动配置服务代码中添加了以下内容:C# 在ASP.NET Core 3.1中使用Newtonsoft.Json时,自定义JsonConverter属性不适用于Json.Serialize(),c#,json,asp.net-core,json.net,asp.net-core-3.0,C#,Json,Asp.net Core,Json.net,Asp.net Core 3.0,我想使用Newtonsoft Json.NET在ASP.NET Core 3.1应用程序中执行反序列化。我在启动配置服务代码中添加了以下内容: services.AddMvc().AddNewtonsoftJson(); 我有一个具有自定义序列化属性的MVC模型: public class MyModel { [Newtonsoft.Json.JsonConverter(typeof(MyCustomJsonConverter))] public DateTime MyProp
services.AddMvc().AddNewtonsoftJson();
我有一个具有自定义序列化属性的MVC模型:
public class MyModel {
[Newtonsoft.Json.JsonConverter(typeof(MyCustomJsonConverter))]
public DateTime MyProperty {get; set;}
}
在我看来,我将其序列化为JSON:
<script>
someJsFunction(@Json.Serialize(Model));
</script>
但它不使用MyCustomJsonConverter。在MyCustomJsonConverter中未命中断点
答案可能是添加到全局Json设置中:
services.AddMvc().AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters = new List<JsonConverter>()
{
new MyCustomJsonConverter()
};
});
但是,MyCustomJsonConverter将应用于每个DateTime属性,而不仅仅是应用了该属性的属性。我还可以使用JSON.Serialize重载:
<script>
someJsFunction(@Json.Serialize(Model, new JsonSerializerSettings()
{
Converters = new List<JsonConverter> { new MyCustomJsonConverter()},
}
));
</script>
但我不想每次打电话都这么做。我很确定这些JsonConverter属性在3.0版本中从Newtonsoft Json.NET转换之前运行良好。知道我做错了什么吗?在您的视图中,为Newtonsoft添加using并使用其序列化程序
@using Newtonsoft.Json;
...
..(@JsonConvert.SerializeObject(Model))
原因是您使用的序列化程序来自不同的库,一个来自Microsoft.AspNetCore.Mvc.Rendering,另一个来自Newtonsoft.Json,在视图中为Newtonsoft添加using并使用其序列化程序
@using Newtonsoft.Json;
...
..(@JsonConvert.SerializeObject(Model))
原因是您使用的序列化程序来自不同的库,一个来自Microsoft.AspNetCore.Mvc.Rendering,另一个来自Newtonsoft.Json