在我的整个项目中,我都有一个单例服务类,该类负责(反)序列化,如下所示:
_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
中的顺序未定义),但是会始终反序列化“从叶到分支”吗?