为什么我的客户端得到“System.Uri 无法序列化,因为它没有无参数构造函数

本文关键字:因为 构造函数 参数 序列化 客户端 System 为什么 Uri 我的 | 更新日期: 2023-09-27 18:33:39

我有一个.net 4.0框架WCF服务。我将此 WCF 引用到 .NET Framework 2.0 网站(不是 Web 应用程序,只是一个网站)。

但是当我调用 WCF 的方法时,我得到一个异常,如下所示:

There was an error generating the XML document.

内在的例外是:

System.Uri 无法序列化,因为它没有无参数构造函数。

我确实有一个无参数构造函数,并且在我的 WCF 中继承了一个构造器,如下所示:

//Service Class
public class MyWcfService : IWcfService
{
     //I even put this hoping to make it work
     public MyWcfService()
     {
     }
     public MyEntity GetEntity(ArgumentObject arg)
     {
          return DoGetMyEntity(arg);
     }
}

[Serializable]
public class MyEntity : EntityBase
{   
    public DateTime LastUpdate { set; get; }
    //Here is the parameterless constructor
    public MsisdnInformation()
    {
        this.LastUpdate = DateTime.Now;
    }
}
[Serializable]
public class EntityBase
{   
    //Here is the parameterless constructor
    public EntityBase()
    {
    }
}

此 WCF 正在与其他项目一起使用(但这些项目是 .NET 3.0 或更高版本的框架项目)。其中一些项目是网站,其中一些是WepApplication。

到目前为止,在我的互联网搜索中,我没有发现任何可以帮助我的情况。

我需要做什么来修复此错误?

为什么我的客户端得到“System.Uri 无法序列化,因为它没有无参数构造函数

正如约翰·桑德斯(John Saunders)在评论我的问题时指出的那样,我需要改变

httpContext.Request.Url

httpContext.Request.Url.ToString()

为了通过

System.Uri

参数从 .NET 2.0 框架到 WCF。

我有点尴尬,我忽略了这个参数。

使用DataContract而不是Serializable。这意味着序列化将由 DataContractSerializer 处理。

DataContract(和 DataMember)属性取代 Serializable 属性。