0

組み込みのjsonコンバーターを使用して、次のようにアクションで複数のオブジェクトを返します。

return Json(new { success = true, data = units });

JSON.NETライブラリを使用する場合、どうすれば同じことができますか?

これは明らかにコンパイルされません:

return new { success = true, data = JsonConvert.SerializeObject(units) };

両方のプロパティを含むこのための追加のビューモデルを作成したくありません。

デフォルトのJsonjavascriptシリアライザーについて間違った理解をしているのでしょうか?

4

2 に答える 2

0

2番目の例でJsonConvert.SerializeObject(units)は、文字列がJavaScriptに返されます。JavaScriptはdata、「実際の」データを含んでいるとは見なさず、中括弧が入った単純な文字列を含んでいると見なします。

いつものように最初の文を使用してください。MVCのJsonメソッドは、内部のオブジェクトをシリアル化します。

例えば:

class Units
{
    public int Width { get; set; }
    public int Height { get; set; }
}

..。

Units u = new Units { Width = 34, Height = 20 };

return Json(new { success = true, data = units });

次のようなJsonが生成されます。

{ "success" : "true", "data" : { "Height" : "20", "Width" : "34" } } }
于 2012-06-03T11:16:44.437 に答える
0

Newtonsoft.Jsonを使用してオブジェクトをシリアル化する場合は、新しいActionResultクラスを作成し、結果にデータを渡すことができます。

例えば:

public class NewtonsoftJsonResult : ContentResult
{
    private readonly object _data;

    public NewtonsoftJsonResult(object data)
    {
        _data = data;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        Content = JsonConvert.SerializeObject(_data);
        ContentType = "application/json";

        base.ExecuteResult(context);
    }
}

匿名オブジェクトをデータとして使用してカスタムActionResultを返すだけです。

public ActionResult Index()
{
    return new NewtonsoftJsonResult(new { success = true, data = units});
}
于 2012-06-03T12:39:21.587 に答える