请看下面的代码:
<head runat="server">
<title></title>
<script type="text/javascript" src="Javascript/json2.js"></script>
<script type="text/javascript" src="Javascript/jquery-1.11.1.min.js"></script>
<script type = "text/javascript">
Test();
function Test() {
alert("got here 1");
$.ajax({
type: "POST",
url: "AjaxObjectTest.aspx/Test",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess(),
async: false,
failure: function (response) {
alert('there was an error counting possibles')
}
});
function OnSuccess() {
return function (response) {
var data = response.d;
alert(data.name);
}
}
}
</script>
</head>
asp.net代码看起来像这样:
Public Class Person
Public id As Integer
Public age As Integer
Public name As String
End Class
Public Class AjaxObjectTest
Inherits System.Web.UI.Page
<System.Web.Services.WebMethod()> _
Public Shared Function Test() As Person
Dim p1 As Person = New Person
p1.id = 1
p1.age = 34
p1.name = "Mark"
Return p1
End Function
End Class
请参阅此链接:https://msdn.microsoft.com/en-us/library/ms733127(v=vs.110).aspx
我不需要向Person类添加DataMember属性,也不需要向属性(即Person)添加Data Contract属性。ID、人。年龄和人。
为什么会这样?
DataContract和DataMember是WCF服务上用于描述服务元数据的属性,在您的情况下,您没有使用实际的"web服务",您只是公开了一个要使用的方法并作为web服务行为。
请参阅下面的主题,了解何时应该使用它们。数据成员何时使用DataContract和DataMember属性?
从您发送的链接(https://msdn.microsoft.com/en-us/library/ms733127(v=vs.110).aspx):
默认情况下,DataContractSerializer推断数据契约并序列化所有公开可见的类型。
你的字段可能是公共的,所以默认情况下序列化器会把它们放在响应中。为了选择序列化的字段,必须在要忽略的字段上使用DataContractAttribute
和IgnoreDataMemberAttribute
。