6

私は JSON が初めてで、jQuery Ajax 呼び出しによって照会される StringBuilder を使用して単純な JSON オブジェクトを作成したいと考えています。

[WebMethod]
public static string GetmyJSON()
{
    StringBuilder sb = new StringBuilder();       
    sb.Append("{firstname: \"Manas\",").Append("lastname : \"Tunga\"").Append("}");
    return sb.ToString();    

}

クライアント側のコードには次のものがあります。

.ajax({

        type: "POST",
        url: "simplePage.aspx/GetmyJSON",           
        data: "{}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',

        success: function (data) {

            alert(data.d.firstname);             


        } // end of sucess

    }); // End of ajax

しかし、アラート メッセージには「Manas」ではなく「undefined」と表示されます。StringBuilder を使用して JSON オブジェクトを返すことは可能ですか?

4

3 に答える 3

12

絶対にしないでください。JSON を手動でビルドしないでください。常にJSON シリアライザーを使用します。または、あなたの場合、ASP.NET webmethod ランタイムが処理するため、それを行う必要さえありません。あなたがしなければならないことは、ビジネス要件に集中することだけであり、配管について心配する必要はありません。

たとえば、データを表すモデルを定義することから始めます。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

次に、Web メソッドにこのモデルを返させ、シリアル化に関するすべての懸念をフレームワークに任せます。

[WebMethod]
public static Person GetPerson()
{
    Person p = new Person();
    p.FirstName = "Manas";
    p.LastName = "Tunga";
    return p;
}

次に、クライアントからこのメソッドを使用するだけです。

$.ajax({
    type: 'POST',
    url: 'simplePage.aspx/GetPerson',
    data: '{ }',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert(data.d.FirstName);
        alert(data.d.LastName);
    }
});

JSON、文字列ビルダーなどについて心配する必要はありません...

また、必要に応じて複雑な引数を Web メソッドに渡すこともできます。

public class Foo
{
    public string Bar { get; set; }
}

その後:

[WebMethod]
public static Person GetPerson(Foo foo)
{
    ...
}

そして最後に:

$.ajax({
    type: 'POST',
    url: 'simplePage.aspx/GetPerson',
    data: JSON.stringify({ foo: { bar: 'baz' } }),
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert(data.d.FirstName);
        alert(data.d.LastName);
    }
});

ここJSON.stringifyに示すメソッドは、最新のブラウザーにネイティブに組み込まれています。レガシー ブラウザーをサポートする必要がある場合は、json2.jsスクリプトをページに含めることができます。

于 2012-05-10T11:53:52.567 に答える
3
var lstMes = new List<Person>();

            System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
             new System.Web.Script.Serialization.JavaScriptSerializer();
                string sJSON = oSerializer.Serialize(lstMes);
                return sJSON;

への参照を追加することを忘れないでください:

System.Web.Extensions.dll !!
于 2012-05-10T11:52:52.063 に答える
0

質問に厳密に答える - はい、.NET メソッドから必要なものを何でも返すことができます。@canonが質問のコメントで述べたように、おそらくプロパティ名をラップする必要があるという問題があります。

これは、「正しい」答え (既に述べたように: 12 ) が、JSON.NETなどの既存のシリアライザーを使用する(手動でシリアル化する必要がある場合) か、.NET に処理させる (ほとんどの「最近の」のように) ことを示しています。オブジェクト自体を返すことによって。

于 2014-05-19T14:43:27.053 に答える