问题标签 [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 回答
424 浏览

c# - 具有已知类型问题的 WCF - 反序列化程序不知道映射到此合同的任何类型

就在这里呆了半天;

1)我从服务中返回这个类;

2)

3)

当我尝试将 Value 设置为我的类 2 并对其进行反序列化时,我遇到了异常。

我从 wcf 得到了这个例外;

例外; 元素“ http://schemas.datacontract.org/2004/07/Test.Services:Value ”包含映射到名称“ http://schemas.datacontract.org/2004/07/Test.Services ”的类型的数据:K结果'。反序列化器不知道映射到此名称的任何类型。考虑使用 DataContractResolver 或将与“KResult”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到传递给 DataContractSerializer 的已知类型列表中。

我的界面;

说真的,我不知道我现在错过了什么,但我无法通过这个,任何帮助都会很棒,让我开心!

第一次行动

我像这样添加了来自异常 ServiceResult 类的建议;

仍然有同样的例外。

已经谢谢大家了。

0 投票
1 回答
171 浏览

c# - System.DayOfWeek 枚举 - 保存时出现 KnownType 问题的实体错误;开发力量 2012

DevForce 2012 7.2.2、EF 5、Silverlight、C#、VS2012

type 的实体属性System.DayOfWeek,错误(下面的完整错误消息)在尝试将此属性的更改更新/保存为其他值时需要将其添加到已知类型列表中。看起来很奇怪,考虑到它是一个系统可枚举,并且它被列为可以在 DevForce 文档中使用的特定示例(http://drc.ideablade.com/devforce-2012/bin/view/Documentation/enum-types

所以我创建了一个IKnownTypeProvider并添加DayOfWeek为条目:

为了好玩,我还尝试更具体一些,以防工具在某个地方变得混乱(替换DayOfWeekSystem.DayOfWeek整个),但这产生了相同的结果。

我检查过的事情:

  • IKnownTypeProvider发现了吗?成功命中断点
  • 是否在 SL 和服务器端?是的,类定义文件在两个项目中。是的,它列在已知类型的集合中(由 提供var lstKnownTypes = IdeaBlade.EntityModel.KnownTypeHelper.GetServiceKnownTypes(null);

继承的代码,所以也许我忽略了一些东西,但我没有看到它。

添加 IKnownTypeProvider 之前保存更改时出错:

类型 'System.DayOfWeek' 与数据合同名称 DayOfWeek: http://schemas.datacontract.org/2005/07/system ' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 或将它们添加到传递给 DataContractSerializer 的已知类型列表中

添加上面列出的错误后IKnownTypeProvider

格式化程序在尝试反序列化消息时出现异常:尝试反序列化参数ideablade.com/EntityModel:workState 时出错。InnerException 消息是 'Element 'ideablade.com/EntityModel:OriginalValue' 包含来自映射到名称“ http://schemas.datacontract.org/2005/07/System:DayOfWeek ”的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑使用 DataContractResolver 或将与“DayOfWeek”对应的类型添加到已知类型列表中 - 例如,通过添加 KnownTypeAttribute 属性或将其添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。

0 投票
2 回答
282 浏览

.net - 使用 Service Bus 1.0 的继承类的 DataContract 和 KnownTypes

嗨,我有以下类层次结构:

当我尝试反序列化 SuperJob 时,我得到

我已将我的课程注释如下:

不知道我做错了什么?任何想法我该如何解决这个问题?

0 投票
0 回答
81 浏览

c# - WCF - 从客户端中的服务器检索类型

当 WCF 服务器实现 ServiceKnownType 时,如何在客户端检索未知类型的合同?

造成问题的类型不会返回或用作参数。我在我的服务器上集成了 GetKnowTypes(),如下所示:WCF Problem Sending Object To Client

显然我们不能使用 T 型。所以我序列化了我的属性,我想在我的客户端反序列化,但为此我需要原始类型。

我想在客户端获得类似这样的类型:

可能吗 ?如何 ?

0 投票
1 回答
338 浏览

c# - 多态 WCF 反序列化不起作用

我创建了以下类。一个基类 IObject 和 2 个派生类 A 和 B。

我还创建了以下服务:

我想做的是获取 A 或 B 的实例,但我不知道我会得到哪个实例,所以我希望得到一个 IObject 并稍后将其转换为 A 或 B,如我放置的示例所示。

当我发送一个包含 s2 字符串的 json 字符串时会发生什么,我得到的是 IObject 实例而不是 B 实例。代码有什么问题?

我正在使用的客户端示例:

已编辑:我已通过以下链接将示例代码上传到 gitHub: https ://github.com/AlgoEitan/27588144

那里的客户端是 ac# 客户端(我已经用 c# 和 javascript 尝试过 - 网络浏览器客户端)

0 投票
1 回答
852 浏览

c# - WCF 的 KnownType 异常

我有以下服务接口

该请求有效,所以我不会发布它。Response 仅包含一个 DateTime、一个 String 和一个 TreeItem 列表。TreeItem 类的重要部分

一旦父属性设置为 null 以外的值,客户端就会收到 System.ServiceModel.Dispatcher.NetDispatcherFaultException。

说明元素“ http://schemas.datacontract.org/2004/07/Core.Base:_x003C_Parent_x003E_k__BackingField ”包含类型为“http://schemas.datacontract.org/2004/07/Core”的数据。 Base:TreeItem \" 并且反序列化器不知道任何具有该名称的类型。

我尝试使用 KnownType 属性以及 ServiceKnownType 属性。两者都没有帮助。唯一有效的是将 Parent 的类型更改为 TreeItem ,我真的不想这样做。特别是因为它可以在其他一些位置包含 ITreeItems,这很可能也会破坏服务。

知道如何解决问题吗?

0 投票
1 回答
101 浏览

c# - 避免使用 DataContractSerializer 和继承重复自己 (DRY)

我正在尝试编写一个文件头,它是一个表示某些对象层次结构的 XML 字符串。

此层次结构在某些点包含子类型,例如,类Plant包含类型的属性Stem,但在序列化时,Root值可以是任何子类的实例Stem,例如LongStemDryStemRottenStem。此外,还有一个属性Collection<LeafBase> Leaves,其项目可以是 的任何子类型LeafBase,例如GreenLeaf,SweetLeaf等。

如果我只使用默认代码,DataContractSerializer 将给出一个运行时错误,抱怨“意外类型”,因为它需要一个类型的对象Stem并接收一个类型DryStem,例如。

因此,一些研究很快将我引向了 Known Types 解决方案,它要求我在目标类型的每个子类中包含一个数组(天知道还有多少层)。

嗯,这在我看来是对 DRY 和 SRP 原则的严重违反,因为如果每次我添加一个子类,我都必须在我的源代码中查找要更新的已知类型列表(这是 Shotgun Surgery 反模式,并且是该系统先前版本的最差特征之一)。

我已经看到了一种使用反射并获得已知类型列表的方法,但我猜这有点骇人听闻(我不在乎),所以我的问题是:

关于 DRY 和已知类型列表问题,对于对象树包含大量继承的类,处理 DataContractSerialization 的好方法是什么?

或者,如果有另一种类型安全的方法可以将对象序列化和反序列化为 XML 字符串,并且不受此问题的影响,那么这可能是一种选择。

0 投票
1 回答
109 浏览

c# - WCF KnownTypes reference generation

I have a WCF service that has one BaseForm that is inherited numerous time (100+), some (10+) have multi-layered inheritance too. All of the derived forms are listed as KnownTypes.

The problem I am having is the time it takes for the service to start up and to generate a client reference. Using the WCF Test Client as a test it takes about 10 minutes for it to complete. If I don't reference the KnowTypes (or just list a couple) it takes about 1.5 mins to fully complete.

Is there anyway to see what is going on, why it is taking so long? Or is there a better way than the standard?

Cheers

0 投票
0 回答
121 浏览

wcf - 在 DataContract 案例中,父类的 KnownType 可以为其子类工作吗?

我的多层项目中有一个 ExceptionDTO 类,它有一个 LogException 方法,它需要 4 个属性,其中一个是异常。我已经制作了 DataContract 解析器来解析类的类型。

我的问题是:如果我发送一些 SystemException 类型的异常,它会起作用,但如果我发送一个 SystemException 的子可能是 IndexOutOfRangeException,它就不起作用。那么我可以做些什么来建立这种关系。

我收到此错误消息 - 尝试序列化参数http://tempuri.org/:ex时出错。InnerException 消息是 'Type 'System.NullReferenceException' 与数据合同名称 'NullReferenceException: http://schemas.datacontract.org/2004/07/System ' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。

我发送异常的代码是

0 投票
0 回答
400 浏览

c# - KnownType 不是在 reference.cs 中自动生成的

我的 wcf webservice 中定义了两种类型。DynamicFieldsClassA

当我将服务添加为客户端中的服务引用时,我得到了System.ServiceModel.Dispatcher.NetDispatcherFaultException

类型异常

“System.ServiceModel.Dispatcher.NetDispatcherFaultException”发生在 mscorlib.dll 中,但未在用户代码中处理

附加信息:格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:GetResultsResult时出错。InnerException 消息是“第 1 行位置 3900 中的错误。元素“ http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value ”包含来自映射到名称“ http://schemas ”的类型的数据.datacontract.org/2004/07/SomeNamespace:ArrayOfClassA'。反序列化器不知道映射到此名称的任何类型。如果您正在使用 DataContractSerializer,请考虑使用 DataContractResolver,或者将与“ArrayOfClassA”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到传递给序列化程序的已知类型列表中。有关更多详细信息,请参阅 InnerException。

我查看了客户端自动生成的 reference.cs 文件,发现 KnownType 属性不存在

[KnownType(typeof(ClassA))]然后我在reference.cs中手动添加属性并且它可以工作

这里的问题是每次更新服务引用,都需要去reference.cs手动添加knowntype属性。有没有办法让客户端自动生成它?