Да, это правда, вам не нужно украшать класс с помощью [DataContract], [Serializable], [Xml ...], чтобы WCF его сериализовал. Вы можете отправлять произвольные типы , если они следуют определенному шаблону (конструктор без параметров, только сериализация открытых полей / свойств). Есть хорошая статья о сериализации POCO (простых старых объектов CLR) в WCF по адресу http://www.pluralsight -training.net / community / blogs / aaron / archive / 2008/05/13 / 50934.aspx .
Что касается ограничений других клиентов, таких как Silverlight, если типы поддерживаются в клиенте, то он также должен работать.
И для вашего последнего вопроса это не имеет значения (до тех пор, пока вы можете писать в поток). Если вы хотите сериализовать объект в файл (в изолированном хранилище Silverlight), вам, скорее всего, придется использовать FileStream
; если вы хотите сериализовать объект по сети напрямую, вы можете использовать поток, возвращаемый HttpWebRequest.EndGetRequestStream
; если вы хотите сделать некоторые манипуляции в памяти, вы можете использовать MemoryStream. Но для сериализатора это не имеет значения. Для DCS это просто поток.
Еще одна вещь, если у вас есть служба WCF и вы используете ее с помощью Silverlight (например, с помощью добавления ссылки на службу - ASR - для создания прокси-сервера к ней), вам не нужно беспокоиться о сериализации - прокси, сгенерированный мастером ASR, будет использовать внутренние классы WCF для обработки сериализации для вас, все, что вам нужно сделать, это вызвать методы в прокси, передавая объекты напрямую.