Wcf 服务(已启用 ajax)传递的 XML 子对象始终为空
本文关键字:对象 XML 服务 启用 ajax Wcf | 更新日期: 2023-09-27 17:56:19
我有一个WCF(启用ajax)的Web服务,并具有以下方法,它接受一个名为TypeRequest的对象。
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes",
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
XElement XMLGetTypes(TypeRequest obj)
{
//do something
}
类型请求对象定义为;
[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具有正确的值,但帐户对象为空
为什么会这样,我做错了什么,因为我似乎想不通。 我是否需要提供更多信息才能获得帮助?
除了我之前的信息之外,我还添加了一种接受 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
}