繁体   English   中英

Wcf 服务(启用 ajax)传递的 XML 子对象始终为 null

[英]Wcf service (ajax enabled) passed XML child object is always null

我有一个 WCF(启用 ajax)Web 服务,并且有以下方法,它接受一个名为 TypeRequest 的对象。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]

XElement XMLGetTypes(TypeRequest obj) 
{  
  //do something 
}

TypeRequest 对象定义为;

[DataContract(Namespace = "")]
public class TypeRequest 
{
    [Required]
    [DataMember]
    public long Id{ get; set; }

    [Required]
    [DataMember]
    public Account Account { get; set; }
}

然后我的子帐户类如下;

[DataContract(Namespace = "")]
public class Account
{
    /// <summary>
    /// Email address
    /// </summary>
    [DataMember]
    [Required]
    [StringLength(175)]        
    public string Email { get; set; }

    /// <summary>
    /// Plain text password
    /// </summary>
    [DataMember]
    [Required]
    [StringLength(16, MinimumLength = 8)]
    public string Password { get; set; }
}

我遇到的问题是,如果我通过以下示例 Xml 进行调用

<TypeRequest>
<Id>1</Id>
<Account>
<Email>myemail@domain.com</Email>
<Password>12345</Password>
</Account>
</TypeRequest>

到方法 XMLGetTypes(TypeRequest obj),我可以查看 obj 和 Id 具有正确的值,但 Account 对象为空

这是为什么,我做错了什么,因为我似乎无法弄清楚。 我是否需要提供更多信息才能获得帮助?

根据我之前的信息,我添加了一种接受 JSON 请求的方法,例如

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/JSON/GetTypes", 
BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]

string JSONGetTypes(TypeRequest obj) 
{  
  //do something 
}

用 JSON 调用它作为

{
  "TypeRequest": {
    "Id": "1",
    "Account": {
      "Email": "myemail@domain.com",
      "Password": "12345"
    }
  }
}

我可以查看 TypeRequest obj,并且可以查看发布的所有正确数据。 因此,为什么 Xml 帖子不起作用?!?

试试把你的xml改成这个?

<TypeRequest>
  <Id>1</Id>
  <Account>
    <Email>myemail@domain.com</Email>
    <Password>12345</Password>
</TypeRequest>

添加

[XmlSerializerFormat] 以我的方法解决了问题。 例如

[OperationContract]
[XmlSerializerFormat]
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]

XElement XMLGetTypes(TypeRequest obj) 
{  
  //do something 
}

暂无
暂无

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

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