我的项目中有一个名为 AC 的类,它有一个类型为 IPEndPoint 的属性 Address。这种类型以及 IPAddress 因默认情况下无法序列化为 JSON 而臭名昭著。由于我需要序列化我的类,我实现了两个自定义转换器:IPAddressConverter 和 IPEndPointConverter。为了让 Newtonsoft 使用这两个转换器,我创建了这个类:
public sealed class CustomSettings : JsonSerializerSettings
{
public CustomSettings() : base()
{
this.Converters.Add(new IPAddressConverter());
this.Converters.Add(new IPEndPointConverter());
this.TypeNameHandling = TypeNameHandling.Auto;
}
}
..我在我的 Main 中这样使用它:
Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
现在我正在尝试将 API 添加到我的程序中。我已经创建了一个 .Net Core Web API 项目并将其成功集成到我的程序中。但是,当我尝试编写一个 POST 方法时,问题出现了,该方法需要来自请求正文的 JSON 格式的 AC 实例。序列化程序无法转换 IPEndPoint,因此 AC 的值始终为 null。
关于 .Net Core API 配置的信息非常少。谁能告诉我如何将这些相同的设置传递给 MVC 的序列化程序?
编辑
我找到了一种方法(某种程度上)。事实证明,您可以在 ConfigureServices 方法中设置 JSON 选项。
我试图通过这样做来修改 MVC 的序列化程序的设置,就像我对程序的其余部分所做的那样:
services.AddMvc().AddJsonOptions(options => options.SerializerSettings = new CustomSettings());
但是,这不起作用,因为 options.SerializerSettings 是只读的。
我可以一个接一个地传递转换器,但我更希望它们都从一个地方(CustomSettings 类)进行管理。这可能吗?
最佳答案
创建一个扩展方法来封装你想要配置的内容
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());
关于c# - 设置 Asp.Net Core MVC Json 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031915/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r