В настоящее время я разрабатываю сетевую оболочку на C#, используя привязку clrmq для ZeroMQ.Сериализация и десериализация по clrmq
Моя проблема в том, что я пытаюсь думать о способе десериализации и сериализации прозрачно; то есть сетевая оболочка может передавать любой объект в виде байтов без знания или ухода за его типом и может десериализоваться на правильный тип на другом конце.
У меня есть класс heirachy следующего
public interface ITransmission
{
Type Type { get; }
}
public abstract class Transmission<T> : ITransmission
{
public Type Type { get { return typeof(T); } }
}
Идея заключается в том, чтобы сериализовать объекты, которые осуществили тип передачи, передачи их через clrmq как байты и десериализация их на другом конце
Моих идеальное решение будет
- Быть способным сериализовать объекты любого типа без украшения атрибута или минимального атрибута предпочтительно формат байтового массива (отсюда идея выше, используя объект передачи)
- Уметь десериализации принятого формата байтового массива в машинописном объект
Что люди в настоящее время использует или делает, чтобы решить вопрос о сериализации и десериализацию прозрачно? Скорость будет фактором в какой-то момент, но в это время я просто пытаюсь выяснить, какие варианты.
Является ли подразумеваемое ограничение здесь, что сетевые библиотеки должны иметь ссылки на все сборки, содержащие типы, которые должны быть переданы?
Кроме того, другой вопрос заключается в том, должен ли это быть осуществимым подходом, или должен ли сервер и клиент быть строго типизированным с самого начала?
Спасибо за чтение.
Является ли скорость критическим фактором здесь? В прошлом я делал что-то подобное с отражением. Это было много лет назад, но вкратце, что я сделал, был некоторый код, который бы использовал отражение для итерации по каждому члену в объекте, а затем упаковывал его в массив байтов. Принимающая сторона делала то же самое в обратном порядке. Это было невероятно гибко, и IMO довольно гладкий – dferraro
Hiya, скорость будет фактором в какой-то момент, но сейчас я просто собираю идеи. Насколько быстро/медленно было ваше решение? Могу ли я использовать информацию о типе в интерфейсе, чтобы сделать его быстрее? – Bernard
Это было достаточно быстро для моих потребностей, что было довольно высоким требованием к производительности (на самом деле это была 2D-онлайн-многопользовательская игра) – dferraro