Я пытался использовать protobuf-net с MonoTouch, но понятия не имею, как это сделать, и, несмотря на то, что я слышал, что это возможно, я не смог найти ни одного учебника или какого-либо примера, который действительно работает.
Это подтвердил в своем блоге Марк Грейвелл. что он работает на MonoTouch. Я также просмотрел блоги двух людей, которых он назвал в этой статье, но я не нашел ничего, связанного с protobuf.
Не имея никаких сведений по этому вопросу, я решил загрузить protobuf-net и все равно попробовать его. Итак, я создал следующий объект для тестирования:
[ProtoContract]
public class ProtoObject
{
public ProtoObject()
{
}
[ProtoMember(1)]
public byte[] Bytes { get; set; }
}
и я попытался отправить его через WCF из службы, работающей в Windows, используя [ServiceContract] интерфейс с
[OperationContract]
ProtoObject GetObject();
но полученный на устройстве экземпляр ProtoObject всегда равен нулю. В этом нет ничего неожиданного, поскольку я читал, что для работы protobuf-net с WCF вам необходимо измените app.config / web.config.
Это немного сложно выполнить, поскольку в проекте MonoTouch нет app.config, но я еще не сдался. Чтобы заменить app.config, я попытался программно добавить ProtoEndpointBehavior в поведение конечной точки клиента, и тут я наткнулся на стену. ProtoBuf.ServiceModel.ProtoEndpointBehavior, доступный в .NET 3.0. Реализация protobuf-net недоступна в версии iOS.
Как я могу использовать protobuf-net для десериализации объектов, полученных от оконечной точки WCF на базе Windows, с использованием сериализации protobuf-net.