不需要DataContract和DataMember

时间:2016-07-02 17:46:43

标签: jquery ajax

请参阅以下代码:

<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.ID,Person.Age和Person.Name等属性添加Data Contract属性以使其工作

为什么会这样?

2 个答案:

答案 0 :(得分:1)

DataContract和DataMember是WCF服务上用于描述服务元数据的属性,在您的情况下,您并未使用实际的Web服务&#34;您只是公开了一个要使用的方法并且表现为Web服务。

请参阅以下主题,了解何时应使用它们DataContract&amp;数据成员 When to use DataContract and DataMember attributes?

答案 1 :(得分:0)

从您发送的链接(https://msdn.microsoft.com/en-us/library/ms733127(v=vs.110).aspx):

  

默认情况下,DataContractSerializer会推断数据合约并序列化所有公开可见的类型。

您的字段可能是公共的...因此默认情况下,序列化程序会将它们放入响应中。为了选择序列化的字段,必须在您要忽略的字段上使用DataContractAttributeIgnoreDataMemberAttribute