Что вы, вероятно, хотели бы сделать здесь, это использовать MessageField. Вы можете определить свое вложенное сообщение выше или внутри определения вашего класса и использовать его в качестве первого параметра в определении поля. Например:
class Person(Message):
name = StringField(1)
dob = StringField(2)
class ClassRoom(Message):
teacher = MessageField(Person, 1)
students = MessageField(Person, 2, repeated=True)
В качестве альтернативы:
class ClassRoom(Message):
class Person(Message):
...
...
Это тоже сработает.
К сожалению, если вы хотите хранить произвольный JSON, как в любом виде данных JSON, не зная заранее, это не сработает. Все поля должны быть заранее определены заранее.
Я надеюсь, что вам все еще полезно использовать MessageField.