DataContractSerializer
, используемый WCF, является сериализатором "отказа" и будет пытаться сериализовать все объекты, которые вы ему предоставляете, независимо от того, помечены они или нет атрибутами [DataContract]
.Единственный способ остановить это - явно пометить ваши объекты атрибутами [IgnoreDataMember]
.
См. здесь для получения дополнительной информации о том, как DataContractSerializer
будет сериализовать ваши типы.
Очевидно, что ваш клиент может сериализовать OK, иначе WCF выдаст ошибку, но я предполагаю, что серверная сторона не ожидает чего-то, что вы отправляете.Можете ли вы дать какую-либо информацию об ошибке?
РЕДАКТИРОВАТЬ: Я подозреваю, что это потому, что вы отправляете неизвестного типа.Конец службы знает о строках, поэтому может успешно десериализовать их, но ничего не знает об объекте Person, поэтому не знает, что с ним делать.(Клиент знает, что такое Person, поэтому может его сериализовать нормально).
Попробуйте добавить [ServiceKnownType(typeof(Person))]
к определению вашего сервиса.Очевидно, что сервису потребуется доступ к объекту Person для компиляции.