【问题标题】:Why can't a DataMember in WCF return Type?为什么 WCF 中的 DataMember 不能返回类型?
【发布时间】:2009-07-10 17:08:44
【问题描述】:

试图让它工作,但没有运气:

[DataMember]
public Type ParameterType { get; set;}

【问题讨论】:

    标签: wcf


    【解决方案1】:

    Web 服务通常是跨平台的。 Java 程序如何处理来自 .NET 的 System.Type?

    另外,您希望 Type 的哪一部分被序列化,您希望如何反序列化?

    【讨论】:

    • 我明白了。我真的只需要可以轻松作为字符串传递的类型名称。
    • 这会转移问题而不是试图回答它。
    • 不,这是直接的答案。由于 Web 服务的性质,您不能返回 Type。请注意,提问者显然觉得它不仅试图回答它,而且它确实回答了。
    • 这是不正确的。 Web 服务的性质允许将可序列化对象转换为适当的格式:msdn.microsoft.com/en-us/library/cc656732.aspx;仅仅因为它是Type 并不能使它特别。问题是运行时对象实际上是一个内部类型,不能连线:social.msdn.microsoft.com/Forums/en-US/wcf/thread/…。 Java 可以使用来自 .NET 的 XML 表示做任何它想做的事情。
    • 我们在争论 Web 服务的本质和它们的实现之间的区别。是的,一个实现可以序列化 System.Type(记住它的模式),然后让 Java 扼杀它。当前的 Type 实现实际上不允许序列化。如果这是一个流行的用例,这种情况会发生多快的变化?
    【解决方案2】:

    返回System.Type 的任何字段或属性都不能使用WCF 序列化,因为在运行时,对象的实际类型是System.RuntimeType,它被标记为内部,因此不能被DataContractSerializer 自动序列化,它只能序列化可公开访问的类型。

    但是,您可以在 System.Type 周围编写一个 IXmlSerializer 包装器,以提取您打算传输的信息。

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 2016-12-30
      • 2015-11-14
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多