0

私はこのモデルを持っています:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<Color> Colors { get; set; }
}

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

そしてasp.netMVCreturn Json(...)は私にこれを与えます:

[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]},
{"Name":"Albert","Age":29,"Colors":[{"ColorId":2,"Name":"Blue"}]}]

次のタイプを返そうとすると:List<Person>

しかし、私はこのようなものが欲しいです(可能であれば):

{"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]},{"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]}

私の質問:

  • C#(asp.net mvc)が次のようなより良い形式でJSONを返すようにするにはどうすればよいですか:(注:データを無視してください。私の主なポイントは、メインコレクションとして「People」を使用して返すことです。どうすればよいですか。これ?JSON.net?)

    {"People":[{"Name": "JC"、 "Age":24、 "Colors":[{"ColorId":1、 "Name": "Red"}、{"ColorId":2、 " Name ":" Blue "}]}、{" Name ":" Albert "、" Age ":83、" Colors ":[{" ColorId ":2、" Name ":" Blue "}]}]}

  • または、 KNOCKOUT.JS MAPPING PLUGINをこのタイプのJSON形式で機能させるにはどうすればよいですか?(ノックアウトを知っている人のために)

    [{"Name": "JC"、 "Age":24、 "Colors":[{"ColorId":1、 "Name": "Red"}、{"ColorId":2、 "Name": "Blue "}]}、{"名前 ":"アルバート "、"年齢 ":29、"色 ":[{"色ID ":2、"名前 ":"青 "}]}]


更新(追加の説明/情報):

これは私のデータであり、リストを返したい

    private List<Person> _people = new List<Person>
                                        {
                                            new Person
                                                {
                                                    Name = "JC",
                                                    Age = 24,
                                                    Colors = new List<Color>
                                                                {
                                                                    Red,
                                                                    Blue,
                                                                }
                                                },
                                            new Person
                                                {
                                                    Name = "Albert",
                                                    Age = 29,
                                                    Colors = new List<Color>
                                                                {
                                                                    Blue
                                                                }
                                                }
                                        };

次のようなJSON形式で:

{"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]},
{"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]}

それが可能かどうか疑問に思っていますが、不可能な場合は、knockout.jsマッピングプラグインをMVCのjsonを返す方法に適応させるにはどうすればよいですか?

4

2 に答える 2

3

配列を返すのではなく、People 変数を持つオブジェクトを返したいので、コンテナーが必要です。

このようなもの(動的を使用):

var jsonData = new 
            {
                People = _people 
            };
return Json(jsonData, JsonRequestBehavior.AllowGet);

アップデート

JSON は非常に単純な形式です。今必要のないものはすべてスキップしましょう。

  • オブジェクト: json 内のオブジェクトは、 で始まり、 で終わり{}ます。それらのすべては、C# のプロパティに対応します。
  • 配列: aIEnumerableを返すと、配列が返されます。配列には、他の配列、オブジェクト、または単純なフィールドを含めることができます。

上記のコードは C# で動的オブジェクトを使用しており、次のようなクラスに変換できます。

public class MyCustomClass
{
    public IEnumerable<Person> People {get;set;}
}

したがって、配列を返すオブジェクトであり、結果は次のようになります。

{ People: [] }

{}が に対応する場所MyCustomClass

于 2011-12-30T13:25:24.990 に答える
1

たとえば、次の方法で物を返すことができます。

 var jsonData = new
            {
                Name = qry.Name,
                Age = qry.Age,
                Colors = (
                    from c in qry
                    select new
                    {
                        ColorID = c.ColorID,
                        Name = c.Name
                    }).ToArray()
            };

return Json(jsonData, JsonRequestBehavior.AllowGet);

多分そのようなもの:)

于 2011-12-30T12:56:29.153 に答える