3

C# で Json オブジェクトを返そうとしています。私は MVC コントローラーを初めて使用し、Json を初めて使用すると、このオブジェクトとその空を返します。

public class A
{
    private string name;
    public void set(string data)
    {
        name = data;
    }
    public string get()
    {
        return name;
    }
}
public JsonResult Hello()
{
    A obj = new A();
    obj.set("Abc");
    JavaScriptSerializer js = new JavaScriptSerializer();
    string jsonVar = js.Serialize(obj);
    return Json(jsonVar, JsonRequestBehavior.AllowGet);
}
4

3 に答える 3

4

C# には、(C# 3+ では) 自動的に作成できるプロパティがあります。

public class A
{
    public string Name { get; set; }
}

次に、JSON が正しく返されるように、新しいオブジェクトにラップされたオブジェクトを返す必要があります。オブジェクトを自分でシリアル化する必要はありません (別の方法で返すことができるためActionResult)。

public JsonResult Hello()
{
    A obj = new A();
    obj.Name = "Abc";
    return Json(new { obj }, JsonRequestBehavior.AllowGet);
}

これにより、新しい Json オブジェクトが作成されます{"obj":{"Name":"Abc"}}

于 2013-04-09T00:46:14.157 に答える
3

フレームワークがそれを推測し、プライベート変数の値getを設定できると想定しています..そうではありません。setname

代わりにname、パブリック プロパティを作成すると、動作するはずです。

public class A {
    public string Name { get; set; }
}

A obj = new A() { Name = "Abc" };
/* ...etc... */

フレームワークの観点からこれについて考えてみてください。get何を行っているか、または何を行っているかをどのように判断できsetますか? それらは同じ変数にアクセスしていますか? 誰が知っている..結局のところ、そのランタイム。これが、想定どおりにメソッドをシリアル化できない理由です。

于 2013-04-08T23:54:49.113 に答える
1

メソッドに名前を付ける必要がありますGetand Set- でもGetNameandSetNameではありません.C#の読みを正しく覚えていれば、CLRはプロパティをCILコードに「変換」するときに慣例に従ってそれを行います(ゲッターは「取得」メソッドになり、セッターは「セット」メソッド)。「正しい」方法は、意味のある名前を持つプロパティを使用することです-後で感謝します:

private string _name;
public string Name { get { return _name; } set { _name=value; } }
于 2013-04-09T00:54:12.213 に答える