[英]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.