gpt4 book ai didi

wcf - 为不同程序集中的数据协定声明已知类型

转载 作者:行者123 更新时间:2023-12-04 07:06:55 25 4
gpt4 key购买 nike

我在 WCF 服务中有一个方法,它返回一个复杂类型 (myComplexResult),其中包括一个 List (Of Common.myBaseClass) 作为其成员之一。我希望这个列表包含不同类型的 Foo.myClass1 和 Bar.myClass2 的项目,它们都继承自 Common.myBaseClass。请注意,所有这些类都在不同的程序集中定义。

该服务抛出此异常:

Type 'Foo.myClass1' with data contract name 'myClass1:http://mynamespace/foo/' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.



好的,所以我意识到我需要将 myClass1 和 myClass2 声明为 myBaseClass 的已知类型,以便 DataContractSerializer 知道如何处理它们。我不能做显而易见的事情并使用 myClass1 和 myClass2 的已知类型属性装饰 myBaseClass 类,因为这意味着添加对 Foo 和 Bar 程序集的引用,这会导致循环依赖。

我希望在我的配置文件中使用声明类型,我尝试了这个:
<system.runtime.serialization >
<dataContractSerializer >
<declaredTypes >
<add type ="Common.myBaseClass, Common">
<knownType type ="Foo.myClass1, Foo" />
<knownType type ="Bar.myClass2, Bar" />
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>

这似乎没有帮助,所以我尝试向 myComplexResult 添加一个 KnownType 属性:
  <DataContract(name:="myComplexResult", [namespace]:="http://mynamespace/coo/")> _
<KnownType(GetType(Foo.myClass1))> _
Public Class myComplexResult
<DataMember(name:="myList")> _
Public myList As List(Of Common.myBaseClass)

但我仍然遇到同样的错误。帮助!我该怎么办?

最佳答案

我的错。我已经重新尝试过,上面发布的两个解决方案实际上都有效。我认为这是在运行测试之前根本不更新我的测试项目上的服务引用的情况 - 哎呀!!!

关于wcf - 为不同程序集中的数据协定声明已知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com