为什么我的客户端得到“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。
到目前为止,在我的互联网搜索中,我没有发现任何可以帮助我的情况。
我需要做什么来修复此错误?
正如约翰·桑德斯(John Saunders)在评论我的问题时指出的那样,我需要改变
httpContext.Request.Url
自
httpContext.Request.Url.ToString()
为了通过
System.Uri
参数从 .NET 2.0 框架到 WCF。
我有点尴尬,我忽略了这个参数。
使用DataContract而不是Serializable。这意味着序列化将由 DataContractSerializer 处理。
DataContract(和 DataMember)属性取代 Serializable 属性。