Использование Newtonsoft.Json.JsonConverter в многопоточной среде - PullRequest
0 голосов
/ 16 февраля 2019

На протяжении всего моего проекта у меня есть одноэлементный класс обслуживания, который занимается (де) сериализацией, с чем-то вроде этого:

_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,
};

Служба будет использоваться в многопоточной среде, т.е. несколько (de) в сериализационных задачах одновременно используется JsonSerializerSettings с моими пользовательскими JsonConverter.

. До настоящего времени преобразователь не имел состояния, но для десериализации я рассматриваю возможность отслеживания состояния,то есть текущая позиция в объекте JSON, дочерние / родительские отношения.Конвертер должен будет хранить / кэшировать свои результаты (в основном в переопределении ReadJson) в некотором стеке / списке.

Все (де) сериализованные вызовы заключены в методы упомянутой службы, поэтому я мог легко реализовать использование нового экземпляра JsonSerializerSettings с моим пользовательским JsonConverter для каждого вызова.

Предполагая, что мое первоначальное предположение верно, что JsonConverter не зависит от потоков и поэтому поддерживает многопоточность , пока он не имеет состояния , мой вопрос: могу ли я положиться на JsonConverterвсегда десериализовать объекты в одном и том же порядке?

Я знаю, что порядок, в котором заполняются члены, не определен (так как порядок в Dictionary нет), но всегда будет десериализован "от листа кфилиал "?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...