问题标签 [known-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
53 浏览

wcf - 有没有办法在 wcf 中提到接口作为已知类型?

我正在使用 wcf 服务,因为我需要返回一些从名为 IComponents 的接口派生的复杂对象,而不是在服务中将 concreate 类称为已知类型,有没有办法在 wcf 中将 IComponents 称为已知类型?

提前致谢...

0 投票
2 回答
798 浏览

wcf - wcf .net4 字典包含字典

我试图返回一个数组,dictionary <string, object>其中对象可能包含基本类型,如 int、bool 等,或者它可能包含另一个数组dictionary<string, object>

虽然我可以让它很好地序列化,但如果字典中有字典,它就不会反序列化。

我收到以下错误:

班上:

功能:

运行它会给出错误消息,但我认为我得到了正确的 knowntype?

0 投票
0 回答
453 浏览

wcf - 服务参考忽略已知类型

如果在服务引用中使用上述内容,则生成reference.cs的将忽略上面指定的 knowntypes。

我指定了,LeeDictionary所以我可以设置我自己的命名空间(认为它可能是命名空间问题),将其更改为Dictionary<string,object>是一样的。当字典本身包含另一个字典并抱怨类型未知时,问题就来了。

如果我将 knowntype 行添加到reference.cs它,那么一切正常,但我不明白为什么它不会在生成引用时将其放入?

0 投票
1 回答
1334 浏览

vb.net - WCF 服务已知类型对象不会返回已知类型的属性

我创建了一个 WCF 服务并有两个特定的对象,Contact 和 Driver。驱动程序继承联系人。Contact 对象是更大的 Member 对象的一部分。在代码中,我有以下内容:

因为我在 datacontract 行上有 knowntype,所以我可以创建一个带有 Info 属性的 Member 对象作为 Driver 而不是 Contact,这样我就可以保存他们的许可证信息。

我的问题是,当我创建一个测试项目来查看返回的数据时,我调用 Info 属性时无法获取许可证信息。

sMember.Info 只给我属于联系人的属性(姓名、家庭电话等),而没有属于司机的属性(LicenseNum、LicenseState 等)我如何访问此信息?

我已经尝试将 ServiceKnownType 添加到我的 OperationContract 中,如下所示:

但它没有帮助。

0 投票
6 回答
8674 浏览

c# - 为每个派生类避免 KnownType 属性的公认方法

是否有一种普遍接受的方法来避免在 WCF 服务上使用 KnownType 属性?我一直在做一些研究,看起来有两种选择:

  1. 数据合约解析器
  2. NetDataContractSerializer

我不喜欢每次添加新类型时都必须静态添加 KnownType 属性,因此想要避免它。

是否应该使用第三种选择?如果是这样,它是什么?如果不是,那么以上两个选项中哪一个是正确的选择?

编辑 - 使用方法

第三种选择是使用反射

0 投票
1 回答
223 浏览

wcf - 为什么 .Net Remoting 不需要已知类型但 WCF 需要?

我们正在迁移我们的 .net Remoting 应用程序以使用 WCF。现在让我感到困惑的一件事是 WCF 引入但远程处理不需要的“已知类型”的概念。虽然我有点了解已知类型是什么以及它们的作用,但我感到困惑的是 WCF 和 Remoting 之间的区别 - 在发件人方面,如果 WCF 没有足够的关于手头对象的类型信息来序列化它,为什么Remoting?接收者也一样:为什么 .net Remoting 在反序列化接收到的对象时没有问题,但 WCF 有问题?那是因为远程处理将元数据与数据一起发送吗?如果是这样,为什么 WCF 不能这样做?

0 投票
0 回答
1047 浏览

wcf - WCF:不将数组中的 knowntype 反序列化为派生类,不确定如何调试 datacontractserializer

我是 WCF 的新手,希望有人可以提供帮助。我有一个非抽象基类,该基类[knowntype]与派生类一起应用于它,并在数组中对我的服务的请求正文中使用。当我使用带有派生类的 XML 调用服务时,我在反序列化后得到的所有代码都是基类,而不是派生类。

输入 XML 有一个xsi:type似乎被完全忽略的 xml 实例类型 ( ) 属性——无论我将其设置为什么,系统都会为我提供没有错误的基类。

我得到的实际代码/等是巨大的。所以,我敲了一个有代表性的测试,但这工作正常,有趣的是,如果我将 更改xsi:type为无效类型,我会从 中得到一个异常,这DataContractSerializer与我想要工作的代码不同!

如果我更改元素的名称以强制异常,我会看到提及DataContractSerializer

所以,我有点难过:从异常情况来看,看起来它在两种情况下都使用了 DataContractSerializer,但在实际代码中,它甚至没有尝试使用派生类型。与较旧的 ASMX 样式服务不同,我还没有找到一种方法可以跳入序列化程序代码以查看它到底在做什么。我做错了什么,如何调试序列化程序?

如果有任何帮助,我可以尝试提供更多代码/xml。我得到的“演示”代码如下;就像真实的代码一样,它[MessageContract]为服务使用 a,但实体都是 DataContract 的(在真实的代码中,SVCUTIL 生成了具有相似属性的代理代码)。

0 投票
1 回答
122 浏览

c# - 使用 DataContract 序列化交付的类的实例

我有一个带有类的库,如下所示:

另外,我还有另一个项目,其中包含该库和类的引用,如下所示:

我想知道如何序列化list<MyBaseClass>可能包含MyBaseClassand的对象MyDeliveredClass

也许我应该使用......但我在图书馆[KnownType(MyDeliveredClass)]没有参考......MyDeliveredClass

0 投票
1 回答
811 浏览

.net - 将 KnownTypeAttribute 应用于对象类型?

我正在尝试使用 Wea​​therBug API(WSDL 在这里)。我正在尝试了解有关 WCF 的一些信息。

我使用 svcutil.exe 从上面链接中的 WSDL 创建类。

然后我尝试执行以下代码来测试它:

我最终得到一个NetDispatcherFaultException

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://api.wxbug.ne​​t /:GetStationListByUSZipCodeResponse 时出错。InnerException 消息是“第 1 行位置 352 中的错误。元素“ http://api.wxbug.ne ​​t/:anyType ”包含映射到名称“ http://api.wxbug.ne ​​t/:ApiStationData”的类型的数据'。反序列化器不知道映射到此名称的任何类型。考虑使用 DataContractResolver 或将与“ApiStationData”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到传递给 DataContractSerializer 的已知类型列表中。

看来我应该取回ArrayOfAnyType这样声明的类型的对象(由 svcutil.exe 生成):

数组看起来应该是 的集合ApiStationData,声明如下:

从我在各种网页上阅读的内容来看,我认为我需要KnownTypeAttributeObject课程中添加一个,因为它ArrayOfAnyType是一个List<object>. 我不认为这是可能的,虽然(或正确的)......

异常提到 也很奇怪http://api.wxbug.net/:anyType,但是在 svcutil 生成的代码中没有定义 for anyType(这就是我对 做出假设的原因ArrayOfAnyType)。

有关如何解决此问题的任何建议?

0 投票
1 回答
1133 浏览

c# - DataContractSerializer 的行为与 KnownTypes 和 Generics 混淆

我正在尝试为任意对象生成 KnownType 列表,并且在尝试使用泛型成员序列化类型时遇到问题,例如DbEntityValidationException具有 type 的 list 属性IEnumerable<DbEntityValidationResult>

在调用 DataContractSerializer 的构造函数时,我向它提供了一个由以下类型组成的 KnownTypes 列表,这些类型是通过使用反射构造来获取其所有属性的类型以及任何泛型类型参数:

此列表包含以下类型,通过跟踪捕获:

然而,由于某种原因,DataContractSerializer 会抛出丢失的类型,就好像列表属性的类型List<object>不是List<DbEntityValidationResult>

System.Runtime.Serialization.SerializationException: Type 'System.Collections.Generic.List``1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' with data contract name 'ArrayOfanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' is not expected. Consider using a DataContractResolver or 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.

为什么 DataContractSerializer 在不使用该类型时会抱怨这种类型,并且当我提供了实际的类型时?