我的项目中的一个类叫做AC
,名为Address
,其属性IPEndPoint
属于IPAddress
。此类型以及IPAddressConverter
因默认情况下无法序列化为JSON而臭名昭着。由于我需要序列化我的课程,因此我实施了两个自定义转换器:IPEndPointConverter
和public sealed class CustomSettings : JsonSerializerSettings
{
public CustomSettings() : base()
{
this.Converters.Add(new IPAddressConverter());
this.Converters.Add(new IPEndPointConverter());
this.TypeNameHandling = TypeNameHandling.Auto;
}
}
。为了让Newtonsoft使用这两个转换器,我创建了这个类:
Main
..我在Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
中使用的如此:
AC
现在我正在尝试为我的程序添加API。我创建了一个.Net Core Web API项目,并将其成功集成到我的程序中。但是,当我尝试编写一个需要来自请求主体的JSON格式的IPEndPoint
实例的POST方法时,出现了问题。序列化程序无法转换AC
,因此null
的值始终为ConfigureServices
。
有关.Net Core API配置的信息非常少。谁能告诉我如何将这些相同的设置传递给MVC的序列化器?
修改
我找到了一种方式(某种程度)。事实证明,您可以在services.AddMvc().AddJsonOptions(options => options.SerializerSettings = new CustomSettings());
方法中设置JSON选项。
我尝试修改MVC序列化程序的设置,就像我对程序的其余部分所做的那样:
options.SerializerSettings
但是,这不起作用,因为CustomSettings
是只读的。
我可以逐个传递转换器,但我更喜欢它们都是从一个地方( string s = "1234562.021";
while (e.Graphics.MeasureString(s, drawFont).Width > drawRect.Width)
{
s = s.Substring(1);
if (s.Length == 0)
break;
}
e.Graphics.DrawString(s, drawFont, drawBrush, drawRect);
类)管理的。这可能吗?
答案 0 :(得分:9)
创建一个扩展方法,用于封装您想要配置的内容
public static void AddCustomSettings(this Newtonsoft.Json.JsonSerializerSettings settings) {
settings.Converters.Add(new IPAddressConverter());
settings.Converters.Add(new IPEndPointConverter());
settings.TypeNameHandling = TypeNameHandling.Auto;
}
并在ConfigureServices
services.AddJsonOptions(options => options.SerializerSettings.AddCustomSettings());