【问题标题】:CRM 2015 SDK : The deserializer has no knowledge of any type that maps to this nameCRM 2015 SDK:反序列化器不知道映射到此名称的任何类型
【发布时间】:2015-11-17 17:37:12
【问题描述】:

我目前正在使用 CRM 2015 SDK。我只是想用这个 SDK 更新 C# 中的值。但是由于某些我试图弄清楚的原因,当我保存我的context 时出现了问题。

有代码:

foreach (KeyValuePair<string, Account> account in dicAccount)
{
    //Calcul of url/login/date/key/customer values
    string generatedUrl = Utilities.GenerateURL(url, login, date, key, customer);
  account.Value.new_Link = generatedUrl;
  if (!context.IsAttached(account.Value))
   {
       context.Attach(account.Value);
   }
   context.UpdateObject(account.Value);

 }
 SaveChangesResultCollection results = context.SaveChanges(SaveChangesOptions.ContinueOnError);
  if (results != null)
  {
       foreach (SaveChangesResult result in results)
           {
              Type type = result.Request.GetType();
              bool hasError = result.Error != null;
              Entity entity = (Entity)result.Request.Parameters["Target"];
             if (type == typeof(UpdateRequest))
                {
                    if (hasError)
                       {
                          if (entity != null)
                             {
                                  log.Error(result.Error.Message); 
                             }
                        }
                   }

在我的 Dynamics 实体上,我有这个:

[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("new_link")]

public string new_Link
{
    get
    {
        return this.GetAttributeValue<string>("new_link");
    }
    set
    {
        this.OnPropertyChanging("new_link");
        this.SetAttributeValue("new_link", value);
        this.OnPropertyChanged("new_link");
    }
}

现在,我得到了 LogError 打印的这个错误:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://schemas.microsoft.com/xrm/2011/Contracts/Services:request 时出错。 InnerException 消息是“第 1 行位置 12271 中的错误。元素“http://schemas.datacontract.org/2004/07/System.Collections.Generic:value”包含映射到名称“http://schemas.microsoft.com/xrm/7.1/Contracts:ConcurrencyBehavior”的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑更改 DataContractResolver 上 ResolveName 方法的实现,以返回名称“ConcurrencyBehavior”和命名空间“http://schemas.microsoft.com/xrm/7.1/Contracts”的非空值。”。有关详细信息,请参阅 InnerException。

经过几次搜索,我发现了两个可能的原因:

  1. 启用代理类型:事实上我有代码可以做到这一点。所以这对我没有帮助。

    _serviceProxy.EnableProxyTypes();

  2. SDK 版本:我看到了一些关于 SDK 版本 7.0 可能导致此问题的答案。事实是我使用的是 7.1 版本,我也尝试使用最新的 7.1.1。我使用这个 DLL 的:Microsoft.Xrm.ClientMicrosoft.Xrm.SdkMicrosoft.Crm.Sdk.Proxy

  3. 此元素的类型:我也尝试使用基本字符串作为数据类型。仍然存在序列化问题。

这些想法都不能解决我的问题,而且现在,我真的不知道应该去哪里解决这个问题。

【问题讨论】:

    标签: c# dynamics-crm dynamics-crm-2015


    【解决方案1】:

    问题也可能是未知类型。在 OrganizationServiceProxy 上启用代理类型很重要。它用类似的错误解决了我的问题

    using (OrganizationServiceProxy proxy = new OrganizationServiceProxy(organizationUri, null, credentials, null))
    {
       proxy.EnableProxyTypes();
    }
    

    【讨论】:

    • 为我解决了这个问题!谢谢。
    【解决方案2】:

    不是 100% 的问题是什么,但我建议尝试以下方法,看看是否有帮助。

    1. 重新生成您的代理,可能是您的代理已过期,这就是deserializer has no knowledge of any type that maps to this name 的原因。

    2. 尝试使用后期绑定看看是否有效,如果早期绑定代码中存在问题,有助于缩小范围。例如:

    Entity account = new Entity("account"); account.Id = new Guid(""); account["new_link"] = "your value"; service.Update(account);

    1. 断点代码并查看帐户对象上正在更新哪些值,例如确保另一个属性没有奇数。

    【讨论】:

    • 根据您的信息,我意识到我从同事那里继承的代码中有很多错误。我做了一些新的东西来更新我的实体,它工作正常。谢谢。
    • 我遇到了同样的问题。我使用了 SDK 7.1.2。对我来说唯一的解决方案是将 sdk 降级到 7.0.1
    • 我没有使用 OrganisationServiceProxy - 只是一个 OrganisationService。我可以确认,我也在使用 SDK 7.1.0,因为这是 NuGet 中的最新版本。在 NuGet 中降级到 SDK 7.0.1 解决了该问题。 (不只是使用 7.0.1 crmsvcutil.exe 重新生成早期绑定类型)
    【解决方案3】:

    在使用自己创建的 WCF 服务时,我将分享我对这个问题的解决方案,这些服务使用从 CRM 生成的模型。
    使用 VS 2017 在其他项目中引用 WCF 服务时,Add Service Reference 窗口中有一些选项:按“高级...”并取消选中 Reuse types in referenced assemblies

    希望它对某人有所帮助。

    【讨论】:

      【解决方案4】:

      我已经通过更新参考Microsoft.Xrm.Tooling.Connector 解决了这个问题 事实证明,我使用的是与其他 SDK 引用不匹配的旧版本,但在构建程序时它没有崩溃。

      您可以使用 NuGet 来获取该程序集。 这是项目的网址: https://docs.microsoft.com/es-es/dotnet/api/microsoft.xrm.tooling.connector?view=dynamics-xrmtooling-ce-9

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 2011-09-16
        • 2013-04-01
        相关资源
        最近更新 更多