【问题标题】:WCF Data Contract / SerializationWCF 数据协定/序列化
【发布时间】:2011-03-18 11:52:10
【问题描述】:

我创建了一个简单的 WCF 应用程序,它公开了一个操作。此操作将复合数据类型作为参数。

我没有用 [DataContract] 属性修饰这个复合数据类型。但这是可行的,我可以在 WSDL 中看到它的架构。

现在我的理解是,这个新的自定义类型应该用 [Serializable] 或 [dataContract] 属性修饰,以参与 Web 服务操作。

我在这里缺少什么?

【问题讨论】:

    标签: wcf serialization datacontract xmlserializer


    【解决方案1】:

    正如 Darin 所说,sp1 引入了对推断数据合约的支持。如果编组后的类型是公共类型并且没有使用DataContract 属性修饰,WCF 将自动推断此类属性并将DataMemeber 属性应用于该类型的所有公共成员。

    Juval Löwy 在他的《Programming WCF Services》一书中说;

    在我看来,依赖推断的数据契约是一种草率的 hack,它违背了 WCF 中大多数其他事物的本质。 ...请务必使用 DataContract 属性,并明确说明您的数据合同。这将使您能够利用数据合同功能,例如版本控制。

    【讨论】:

    • 感谢史蒂夫的解释。
    • +1 我倾向于同意 Juval - 这很方便,但如果你没有明确设置 [DataContract] 和 [DataMember] 属性,你也会失去一些东西......
    【解决方案2】:

    自 .NET 3.5 SP1 起,WCF 中引入了 POCO 支持,您可以通过 no longer need 使用 [DataContract][DataMember] 属性来装饰您的对象。公共属性将自动公开。虽然我建议您使用这些属性明确标记它们。

    【讨论】:

    • 哇,谢谢达林。非常感激。只是为了确认......你的意思是说如果我有 3.5 SP1 之前的 .net 版本,我应该会收到一些编译时错误?
    • 不,您应该收到运行时异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多