JsonSerializerSettings线程安全吗?

如果我在我的项目中使用相同的设置,是否可以实例化我的JsonSerializerSettings的一个静态副本并将其用于整个过程?

例如 :

private static readonly JsonSerializerSettings settings = new JsonSerializerSettings {
    Formatting              = Formatting.Indented,
    TypeNameHandling        = TypeNameHandling.None,
    DateFormatHandling      = DateFormatHandling.IsoDateFormat,
    TypeNameAssemblyFormat  = FormatterAssemblyStyle.Simple
};

public static string ToJSONString(this Object source) {
    return JsonConvert.SerializeObject(source, settings);
}   

那么,我线程危险吗?


以下对话发生在Twitter上,@JamesNK是JSON.net的作者:https://twitter.com/jonathan_oliver/status/332227095616966656

来自:Jonathan Oliver @jonathan_oliver致:@JamesNK

静态JsonConvert.DeserializeObject方法是否安全? 使用5.0.4和5.0.5获取一些奇怪的错误。

响应:

James Newton-King♔@JamesNK 2013年5月8日@jonathan_oliver

是。 如果他们不是,请在GitHub上创建一个问题

响应:

Jonathan Oliver @jonathan_oliver 2013年5月9日

@JamesNK事实证明,与JsonConvert一起使用的静态JsonSerializerSettings对象附带的ContractResolver不是线程安全的。

我没有看到有人提出过一个错误,但这暗示着它们的设计应该是线程安全的,但是可能有实现方式来破坏它,或者它可能不是一个整体。


既然你说你不改变JsonSerializerSettings那么就不用担心线程的安全性。 线程竞争只能在修改另一个线程中的共享数据时才会发生,但在此情况并非如此。

我建议你阅读这篇文章,最后你应该对线程,线程安全等有很好的理解。

此外,线程安全性是一个更通用的术语,您需要更精确地表达您的意思。 请参阅你称之为“线程安全”的东西是什么? 获取更多信息。

链接地址: http://www.djcxy.com/p/78681.html

上一篇: Is the JsonSerializerSettings thread safe?

下一篇: Cannot create ScalaDoc link for overloaded method