c # — Сериализация типа System.Drawing.Rectangle из .Net в C ++ с использованием protobuf

Если я сериализую (используя protobuf) прямоугольник (System.Drawing.Rectangle) в c #, можно ли десериализовать его в Objective-C или C ++, потому что System.Drawing.Rectangle не является распространенным типом, как int.

Если возможно, как лучше всего получить этот прямоугольник в c ++ или Objective-c?

1

Решение

Я исправляю это, используя свой собственный тип класса, я имею в виду замену System.Drawing.Rectangle на свой собственный класс, который содержит те же свойства.

Я имею в виду, если вы хотите сериализовать и десериализовать, вы должны использовать общие типы.

4

Другие решения

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.

2

По вопросам рекламы [email protected]