繁体   English   中英

无法在WCF REST服务中反序列化XML

[英]Can't deserialize XML in WCF REST service

我刚刚开始使用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; }
}

我想念任何愚蠢的东西吗?

提前致谢!

原来,我在业务对象的[DataContract]属性中缺少一个额外的值。

应该是[DataContract(Namespace = "")]

看来问题出在方法名称“ CreateAccount”和输入类型“ CreateAccount”之间的命名空间冲突。

同样,您必须将CreateAccount类型标记为DataContract,如下所示:

[DataContract]
public CreateAccount
{
    [DataMember]
    public string LastName { get; set; }

    ...
}

如果要保持相同的名称,可以为CreateAccount类指定一个名称空间。

我注意到您也有返回类型。 确保返回类型也标记有DataContract属性。 另外,指定返回格式,如下所示:

ResponseFormat = WebMessageFormat.Xml

如果您还没有的话,我认为是CreatAccount类上方的[DataContract]属性。

我有一个类似的问题,但是我确实有DataContract属性。 我所缺少的是当尝试将xml重新读回对象时,根元素的xmlns =“ http://uri.org”属性。
例如

<Root_Element xmlns="http://uri.org"><Child_Element/>...</Root_Element>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM