Честно говоря, я не знаком с вариантами WCF, доступными вам в monmotouch; например, они сильно различаются между обычными .NET и Silvelight - и я не вижу оснований предполагать, что monotouch имеет возможность менять сериализатор во время выполнения (что делает «полный» .NET, по крайней мере, в версии MS). Это затрудняет тихий переход , поскольку мы не можем вырвать управление из DataContractSerializer
.
Таким образом, IMO самый простой вариант - захватить контроль над данными вручную и отправлять необработанные byte[]
- в идеале с включенным кодированием MTOM, если это можно сделать с помощью monotouch. Затем, когда у вас есть byte[]
, мир, как говорится, является вашим моллюском.
Ре изменения в ваших типах ... ну, MyFunction()
- это странность, поскольку он не передает никаких данных, поэтому я не уверен, что вы хотите, чтобы я предложил по этому поводу. С MyClass
все, что ему нужно, - это уникальный номер (уникальный в пределах типа, а не глобально) для каждого члена, т.е.
[DataContract]
public class MyClass
{
[DataMember(Order=1)] // <==== this provides the 1 as the key
public int SomeProp {get; set;}
// see below re callback
}
У вас также есть обратный вызов сериализации; они полностью поддерживаются, но он ожидает найти знакомый шаблон - StreamContext
- не тот, который мне известен (хотя он должен работать с StreamingContext
и некоторыми другими).
Наконец, обратите внимание, что по по умолчанию protobuf-net выполняет конструктор, который отличается от DataContractSerializer
. Если вы хотите, вы можете подавить это с помощью:
[DataContract(SkipConstructor=true)]
public class MyClass {...}
Если я пропустил намерение, дайте мне знать.
Обратите внимание, что есть также способы сделать всю конфигурацию без изменения / добавления каких-либо атрибутов, если вы предпочитаете.