Если я сериализую (используя protobuf) прямоугольник (System.Drawing.Rectangle) в c #, можно ли десериализовать его в Objective-C или C ++, потому что System.Drawing.Rectangle не является распространенным типом, как int.
Если возможно, как лучше всего получить этот прямоугольник в c ++ или Objective-c?
Я исправляю это, используя свой собственный тип класса, я имею в виду замену System.Drawing.Rectangle на свой собственный класс, который содержит те же свойства.
Я имею в виду, если вы хотите сериализовать и десериализовать, вы должны использовать общие типы.
System.Drawing.Rectangle
тип напрямую не поддерживается в protobuf-net (код автокортежа не запускается из-за нескольких дополнительных свойств), поэтому я предполагаю, что у вас либо есть суррогат на месте, или вы настраиваете модель вручную — например:
RuntimeTypeModel.Default.Add(typeof(Rectangle),false)
.Add("X","Y","Width","Height");
В этом случае вам нужно создать схему .proto, которая соответствует этому. Protobuf-Net на самом деле поможет вам здесь:
var proto = RuntimeTypeModel.Default.GetSchema(typeof(Rectangle));
который для меня (то есть для конфигурации, которую я использовал) генерирует:
message Rectangle {
optional int32 X = 1;
optional int32 Y = 2;
optional int32 Width = 3;
optional int32 Height = 4;
}
Это должно быть применимо из любой реализации protobuf.