比方说,我有一项服务,在该服务中,我遵循了JsonSerializerSettings的默认设置。
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.None,
Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter()},
DateParseHandling = DateParseHandling.DateTimeOffset
};
对于调用外部dll的方法调用之一,必须更改DateParseHandling的此值。即使该方法本身返回了模型,由于某种原因,它还是采用了我们服务的本地默认设置。
在调试时,我们发现该方法需要进行以下设置,
DateParseHandling = DateParseHandling.DateTime
因此,我们唯一可以使它起作用或丑陋的方法就是将DefaultSettings重置为
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.DateTime
};
但是,此代码将覆盖当前的默认设置,我们不希望这样做。另外,如果我们有JsonString,我们可以这样使用,
JsonConvert.DeserializeObject<Twin>(jsontext, new JsonSerializerSettings { DateParseHandling = DateParseHandling.DateTime});
目前无法选择。
其他详细信息
外部方法使用转换器:TwinJsonConvertor(Link to Git)
任何想法,最好的方法是仅覆盖一个呼叫的默认设置。
答案 0 :(得分:1)
如果您在并发方面没有问题,则可以执行以下操作:
public static boolean ativateSpecialDateSerialization = false;
JsonConvert.DefaultSettings = () =>
{
var settings = new JsonSerializerSettings();
if (ativateSpecialDateSerialization)
{
// Special date parsing settings
settings.DateParseHandling = DateParseHandling.DateTime
}
else
{
// Default settings
settings.ContractResolver = new CamelCasePropertyNamesContractResolver(),
settings.Formatting = Formatting.None,
settings.Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter()},
settings.DateParseHandling = DateParseHandling.DateTimeOffset
}
return settings;
};
try
{
ativateSpecialDateSerialization = true;
// Call to your extrernal method
}
finally
{
ativateSpecialDateSerialization = false;
}
您还可以通过保留两个JsonSerializerSettings
对象来改进代码。