我刚刚开始使用REST入门工具包,并且遇到了构建自己的服务的障碍。我正在尝试创建用于帐户管理的服务,但无法获得该服务来序列化我的对象,并引发以下错误:
无法使用DataContractSerializer反序列化具有根名称'CreateAccount'和根名称空间''(对于操作'CreateAccount'和合同('Service','http://tempuri.org/')的XML主体)。确保将与XML对应的类型添加到服务的已知类型集合中。
这是该服务的实际代码(基于项目随附的'DoWork'方法):
[WebHelp(Comment = "Creates a Membership account")]
[WebInvoke(UriTemplate = "CreateAccount", RequestFormat = WebMessageFormat.Xml)]
[OperationContract]
public ServiceResponse CreateAccount(CreateAccount request)
{
try
{
// do stuff
return new ServiceResponse()
{
Status = "SUCCESS",
ErrorMessage = ""
};
}
catch (Exception ex)
{
return new ServiceResponse()
{
Status = "ERROR",
ErrorMessage = ex.Message + "\n\n" + ex.StackTrace
};
}
}
最后但并非最不重要的是,这是引起所有麻烦的对象:
public class CreateAccount
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public bool SignUpForNewsletter { get; set; }
public string Password { get; set; }
}
我想念任何愚蠢的东西吗?
提前致谢!
最佳答案
看来问题出在方法名称“ CreateAccount”和输入类型“ CreateAccount”之间的命名空间冲突。
同样,您必须将CreateAccount类型标记为DataContract,如下所示:
[DataContract]
public CreateAccount
{
[DataMember]
public string LastName { get; set; }
...
}
如果要保持相同的名称,可以为CreateAccount类指定一个名称空间。
我注意到您也有返回类型。确保返回类型也标记有DataContract属性。另外,指定返回格式,如下所示:
ResponseFormat = WebMessageFormat.Xml