Вроде достаточно разместить атрибут [JsonProperty]
c десериализацией будет сложней — скорее всего придется писать кастомную У меня были такие ситуации, чуть ли не через рефлекш приходилось делать
Да , спасибо помогло с сереализацией , но он его не десереализует
да, это, согласитесь, логично — нет публичного сеттера... Один из вариантов — написание кастомной десериализации (используемый вами newtonsoft это поддерживает). В этой реализации — в зависимости от степени тяжести ситуации, вплоть до задействования рефлекшена.
Если ситуация допускает расширение существующего класса (и такое решение вообще допустимо)— можно добавить публичные методы вида SetPrivateField, в котором будут выставляться приватные значения. Это, кмк, много лучше явного опубличивания полей. Но, повторюсь, не всегда допустимо.
я думал когда сылочному типу даныых присваивается другой сылочный тип данных , меняется ссылка на области в памяти , а не через гетеры передаются данные от нового владельца к старому
Newtonsoft не настолько жесток, чтобы по-умолчанию выставлять и приватные поля (и правильно делает, что не делает этого) Так что, вероятно, это не очень элегантное решение (выставление приватных полей, запись констанс, ридонли полей и прочего) придется делать руками
кстати, последовательная сериализация/десериализация — один из подходов для клонирования ссылочных объектов (так называемый "DeepClone"), так как при десериализации никаких ссылок нет, а есть текст (json) , который надо распарсить и запихать в экземпляр класса
https://pastebin.com/WQMRdsDX
навскидку — приведенный фрагмент вообще о другом...
Так сереалиция и десереализация же используюет рефлексию типу и поэтому очень долгая по выполнению , зачем ее использовать для клонирлвание?
Ну как зачем?... Это просто ) рефлексия, не такая уж и медленная как прямо принято считать. В некоторых проектах вполне допустимый оверхед. Как еще клонировать? Через ExpressionTree — несколько быстрее, да. Но не банально. Самое, безусловно, эффективное с точки зрения производительности — это ручное копирование. Но это крайне не эффективно по времени разработки (огромное кол-во бойлерплейта), и самое главное — поддержка такой лапши получается очень сложной, а возможные (очень вероятные) ошибки по мере разрастания кодовой базы — сложно диагностируемыми.
Сериализатор сам использует рефлексию
да, безусловно, к чему это? Я не утверждал обратного....
Зачем для DeepClone использовать джсон? Есть же msgpack или protobuf
а еще XML есть Много чего есть.
Ну так, сериализация в json и десериализация медленее будет
Чей-та? Не вижу этому прям явных предпосылок. Как по мне - наоборот, наблюдаю некоторый оверхед
Ну вы взяли какой-то определенный сериализатор/десериализатор, неизвестный набор данных, график... Ну ни о чем, простите... это как мне показывают графики как постгресс быстрее mssql, или оракл медленные mysql — ни контекста, ничего. Найдите какой-нибудь быстрый сериализатор джейсона, на одном свет клином не сошелся...
Так, по любому сериализация в текстовый формат будет медленее, чем в массив байт
Возможно, я не призываю использовать json как прокси для клонирования объектов. Просто обозначил это как один из возможных вариантов.
и да — спасибо за информацию, попробую в случае критичных требований к производительности
Обсуждают сегодня