Protobuf RuntimeTypeModel для Java - PullRequest
       2

Protobuf RuntimeTypeModel для Java

1 голос
/ 15 декабря 2011

У меня довольно сложная структура наследования в .net, которая включает в себя универсальные классы. Пример

abstract class A{}
abstract class B<T> : A {}
sealed class C : B<CResponse>{}
sealed Class D : B<DResponse>{}

и так далее. Затем существует класс Request, который содержит несколько A. и затем запрос сериализуется. Я использую RuntimeTypeModel в protobuf-net v2 для сериализации созданных объектов, что является идеальным решением. когда я десериализую в .net, TypeModel помогает мне получить схему и разрешает типы самостоятельно. Как я могу получить его десериализованным в Java. есть ли там RuntimeTypeModel? Кроме того, даже если я создаю прото-файлы для вышеприведенной иерархии (которая будет вручную), как бы я узнал, какой объект-конструктор нужно вызвать. Если это невозможно сделать, вы можете предложить обходной путь

1 Ответ

0 голосов
/ 15 декабря 2011

Ни дженерики, ни наследование напрямую не поддерживаются самим protobuf;Protobuf-Net имитирует наследование через инкапсуляцию в форме (в терминах .proto):

message A {
    optional B_CResponse B_CResponse = ?;
    optional B_DResponse B_DResponse = ?;
}
message B_CResponse {
    optional C C = ?;
}
message B_DResponse {
    optional D D = ?;
}
message C {
}
message D {
}

Очевидно, что вы можете добавлять любые элементы по мере необходимости, и вам нужно заменить?с фактическими номерами полей.Вы должны иметь возможность использовать «protoc» для создания из этого совместимой модели.

Стандартная реализация Java не имеет ничего общего с RuntimeTypeModel AFAIK.

...