Ответ 1
Если вы можете создать структуру и поместить на нее атрибут [DataContract]
- используйте ее! Для WCF это не имеет значения - WCF требует только того, чтобы класс или структура, используемые с пометкой с атрибутом DataContract и всеми полями, которые должны быть включены в сериализованное сообщение, должны быть отмечены атрибутом [DataMember]
.
Если вы проверяете документы MSDN на DataContractAttribute, это показывает, что вы можете использовать его и в структуре:
[AttributeUsageAttribute(AttributeTargets.Class|
AttributeTargets.Struct|AttributeTargets.Enum,
Inherited = false, AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute
UPDATE: что касается того, когда использовать конструкцию вместо класса (в общем, в .NET), см. здесь этот вопрос:
Когда следует использовать структуру вместо класса?
Однако, поскольку WCF действительно связан с передачей сообщений (т.е. ваш клиент делает вызов метода, этот вызов и его параметры преобразуются в сериализованное сообщение, которое отправляется по проводу, а затем повторно собирается на другом конце и обратно в вызов метода), я не вижу веских причин когда-либо использовать struct
.
Все преимущества общей .NET на самом деле не применяются в SOA-мире WCF, я бы сказал (вы не проходите вокруг экземпляров класса или структуры - см. выше).