Проектирование системы сериализатора/Deserializer в пользовательской структуре C#: хранение и контракт на выборC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проектирование системы сериализатора/Deserializer в пользовательской структуре C#: хранение и контракт на выбор

Сообщение Anonymous »

Проектирование системы сериализатора/deserializer в пользовательской структуре C#: выбор хранения и контрактов
Я разрабатываю структуру обучения/обучения C#. Я планирую добавить поддержку сериализации/десериализации объектов с помощью этих спецификов:
  • Логика очень индивидуальна (не json/xml и т. Д.).
  • Пользователи фреймворта должны быть способны добавлять свои собственные сериализаторы/Deserializers только для типа. или только десериализация.
Вопрос 1: Хранение сериалов/deserializers
Я рассматриваю подходы к хранению:
  • Dictionary: ключ - тип целевого объекта, значение - Serializer/Deserializer type . Экземпляры создаются по требованию с помощью отражения (Activator.CreateInstance< /code>).

    pro: < /strong> с более низким следствием памяти.

    con: < /strong> отражение на накладные расходы на все использование = Hit. < /li>
    Dictionary: ключ - тип целевого объекта, значение - экземпляр
    из сериализатора/deserializer.

    pro: Высокая производительность (не отражение на вызов).

    con: более высокое использование памяти (все случаи живут постоянно). Словарь . При первом доступе создайте экземпляр Serializer/Deserializer через отражение и Cache IT (например, в словаре ). Используйте кэшированный экземпляр после этого.

    Цель: Mamer/Performance.
Какой подход предпочтительнее для разработки рамки, готовых к производству? . /> Как пользователи должны реализовать свои сериализаторы (ISerializer)/deserializers (IDeserializer)?
  • опция a: интерфейсы
    public interface ISerializer { string Serialize(T obj, ...); }
    public interface IDeserializer { T Deserialize(string obj, ...); }
    < /code>
    pros: < /strong> < /p>

    Один класс может реализовать оба интерфейса (MyConverter : ISerializer, IDeserializer).
  • более гибкий.

минусы:
  • не принуждает к соблюдению типа ссылки (может быть структурой ) -> риск коробочки, когда в Dictionary < /ul>
    < /li>
    Вариант B: Аннотация классов < /strong> < /p>
    public abstract class Serializer { public abstract string Serialize(T obj, ...); }
    public abstract class Deserializer { public abstract T Deserialize(string obj, ...); }

    pros:


    Обеспечивает соблюдение класса (тип ссылки) -> Без бокса при хранении.


stronger

Подробнее здесь: https://stackoverflow.com/questions/796 ... ork-storag
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»