在多线程环境中使用Newtonsoft.Json.JsonConverter

时间:2019-02-16 00:26:32

标签: c# json multithreading serialization

在我的整个项目中,我都有一个单例服务类,该类负责(反)序列化,如下所示:

_setting = new JsonSerializerSettings()
{
    TypeNameHandling = TypeNameHandling.Objects,
    Converters = new List<JsonConverter>() { new MyConverter() },
    TraceWriter = new Iov.Common.Json.TraceWriter(),
    Formatting = Formatting.Indented,
    SerializationBinder = binder,
    DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
};

该服务将在多线程环境中使用,即,多个(反序列化任务)将同时使用我的自定义JsonSerializerSettings和上述JsonConverter

到目前为止,转换器一直是无状态的,但是为了反序列化,我正在考虑跟踪状态,即JSON对象中的当前位置,即子/父关系。转换器将需要以某种堆栈/列表的形式存储/缓存其结果(基本上在ReadJson覆盖中)。

所有(反)序列化调用都包装在上述服务的方法中,因此我可以轻松地使用JsonSerializerSettings的新实例以及每个调用的自定义JsonConverter来实现。

假设我最初的假设是正确的,JsonConverter是线程不可知的,因此只要它是无状态的,那么它们都是多线程安全的 ,我的问题是:我可以依靠{{1 }}总是以相同的顺序反序列化对象?

我知道没有定义填充成员的顺序(因为JsonConverter中的顺序未定义),但是会始终反序列化“从叶到分支”吗?

0 个答案:

没有答案
相关问题