Если вы используете [DataContract]
, вам нужно будет указать [DataMember]
для каждого участника.
В качестве альтернативы - пометьте класс [Serializable]
, и сериализатор будет сериализовать все внутренние компоненты для васесли вы явно не скажете иначе ([Serializable]
работает по принципу отказа, тогда как [DataContract]
работает по подходу отказа).
Однако - в зависимости от того, что именно вы пытаетесь сделать - этоподход может быть ошибочным.
Когда вы передаете объект через WCF, вы на самом деле не передаете объект вообще - вы передаете копию объекта.Фактически, исходный объект будет сериализован, передан по проводу и десериализован на другом конце.Это означает, что клиент все еще должен создать экземпляр , восстановить экземпляр класса и затем заполнить все свойства.Вы можете ничего не получить, и, возможно, у вас будет довольно дорогой звонок с большим количеством данных, передаваемых по проводам.
Так что все зависит от того, что вы делаете.Если вы не возражаете против того, чтобы клиенты получали копию экземпляра, и если затраты связаны не с огромным объемом данных, а с другими причинами, такими как медленный доступ к базе данных, тогда все в порядке.В противном случае ваш подход может ничего вам не купить.
Кроме того, в удаленном взаимодействии .Net можно иметь ссылку на удаленный объект (т. Е. Ваш клиент может ссылаться на объект на сервере) - если типсам по себе происходит от MarshalByRefObject
, но это не относится к WCF - у вас есть локальная копия.