我正在向包含 Windows 工作流定义的 WCF 服务发送一个对象,但在尝试反序列化我的自定义活动时,反序列化程序出错。
当我以以下形式定义活动的命名空间时,这以前是有效的:
xmlns:tta="clr-namespace:MyNamespace;assembly=MyAssembly"
但出于可维护性的原因,我现在使用程序集属性将我的活动命名空间映射到 XAML 命名空间:
[assembly: XmlnsPrefix("http://schemas.product.com/activities/", "tta")]
[assembly: XmlnsDefinition("http://schemas.product.com/activities/", "MyNamespace")]
因此我的 xaml 命名空间看起来像:xmlns:tta="http://schemas.thacktech.com/activities/"
我的活动声明为:<tta:Naptime />
由于这一变化,我现在收到NetDispatcherFaultException
的内容如下:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:job时出错。InnerException 消息是“元素” http://schemas.datacontract.org/2004/07/System.Activities:Activity包含来自映射到名称“Naptime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null:MyNamespace.Naptime'。反序列化器不知道映射到此名称的任何类型。考虑更改 DataContractResolver 上 ResolveName 方法的实现,以返回名称“MyNamespace.Naptime”和命名空间“Naptime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.'的非空值。有关更多详细信息,请参阅 InnerException。
问题:
为什么解串器在使用 clr-namespace 语法时类型解析成功,但在使用 url-style 语法进行命名空间声明时失败?
看起来类型解析器完全误解了类型,将类名列为命名空间。为什么会这样做?
我该如何正确实施呢?
谢谢!