Почему YamlDo tNet не сериализует частные поля класса? - PullRequest
0 голосов
/ 09 мая 2020

Я пытался найти ответ на Inte rnet, но безуспешно. Вместо этого несколько раз в разных сообщениях я встречал фразу, что «частные поля… никогда не будут сериализованы». Так что я полагаю, что это не ошибка, а философия.

Однако я этого не понимаю. Как можно сериализовать класс и затем восстановить его без закрытых членов, отвечающих за внутреннюю логику класса c?

1 Ответ

1 голос
/ 11 мая 2020

Причина, по которой YamlDo tNet сериализует только свойства publi c по умолчанию, заключается в том, что в противном случае инкапсуляция нарушится. Доступ к закрытым членам будет означать, что модель не сможет гарантировать свои инварианты. Если вы сравните с другими библиотеками, такими как Json. NET, вы заметите, что они используют тот же подход.

Я не думаю, что это проблема, потому что вы не должны (de ) сериализацию вашей модели предметной области напрямую. Это ограничит вашу модель предметной области схемой сериализации, которая во многих случаях должна быть другой. Это та же проблема, что и при попытке сопоставить модель предметной области с реляционной базой данных.

Вместо этого вы должны определить модель сериализации и сопоставить модель предметной области и эту модель сериализации. В этом случае нет необходимости сериализовать частные поля.

Тем не менее, если вы действительно хотите сериализовать частные поля, это тривиально. Вам необходимо зарегистрировать собственную реализацию ITypeInspector, которая возвращает частные поля. Вы можете основывать свою реализацию на ReadableFieldsTypeInspector.

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