invaliddatacontractexception:当调用docusign api时

本文关键字:api docusign 调用 invaliddatacontractexception | 更新日期: 2023-09-27 18:02:35

当在CRM在线上运行的插件中调用Docusign API时,我得到以下错误。

System.Runtime.Serialization。InvalidDataContractException:

类型"System.Threading.Tasks.Task"1 (DocuSignIntegration.Plugins.DocuSignAPI.Envelope)"不能序列化。考虑用DataContractAttribute属性标记它,并使用DataMemberAttribute标记您想要序列化的所有成员属性。如果类型是集合,请考虑使用CollectionDataContractAttribute。参见Microsoft .NET Framework文档中的其他支持的类型。

代码如下:

        EnvelopeInformation envelopeInfo = new EnvelopeInformation();
        envelopeInfo.AccountId = _accountId;
        envelopeInfo.Subject = "My Subject";
        envelopeInfo.EmailBlurb = "My email blurb.";
        tracing.Trace("Enter using...");
        using (var scope = new System.ServiceModel.OperationContextScope(_apiClient.InnerChannel))
        {
            tracing.Trace("httpRequestProperty");

在using (var scope…)行抛出错误。

我在网上找到的帮助建议更改服务,这当然无助于解决这个问题。有人有什么想法吗?

invaliddatacontractexception:当调用docusign api时

您正在配置的数据合约很可能有问题,因为我能够使用GitHub上的DocuSign SOAP SDK进行SOAP API调用。该项目可能对您有帮助,因为您可以将其用作示例(因为它可以开箱使用),并且有.NET, Java, PHP, SalesforceRuby的示例项目。

使用该项目来比较ServiceModel和DataContracts是如何设置的,看看你的项目在哪里可能不合适。我还建议将代码包装在try-catch块中,以获得有关错误的更多信息。例如:

try
    {
        EnvelopeInformation envelopeInfo = new EnvelopeInformation();
        envelopeInfo.AccountId = _accountId;
        envelopeInfo.Subject = "My Subject";
        envelopeInfo.EmailBlurb = "My email blurb.";
        tracing.Trace("Enter using...");
        using (var scope = new System.ServiceModel.OperationContextScope(_apiClient.InnerChannel))
        {
            tracing.Trace("httpRequestProperty");
            // ... remaining code ...
        }
    }
    // Catch the InvalidDataContractException here. 
    catch(InvalidDataContractException iExc)
    {
        Console.WriteLine("You have an invalid data contract: ");
        Console.WriteLine(iExc.Message);
        Console.ReadLine();
    }
      catch (Exception exc)
    {
        Console.WriteLine(exc.Message);
        Console.WriteLine(exc.ToString() );
        Console.ReadLine();
    }