设置Asp.Net核心MVC Json选项

时间:2017-05-17 18:01:21

标签: c# asp.net json asp.net-core json.net

我的项目中的一个类叫做AC,名为Address,其属性IPEndPoint属于IPAddress。此类型以及IPAddressConverter因默认情况下无法序列化为JSON而臭名昭着。由于我需要序列化我的课程,因此我实施了两个自定义转换器:IPEndPointConverterpublic 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); 类)管理的。这可能吗?

1 个答案:

答案 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());