簡體   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