2011-12-30 5 views
0

나는이 모델 있습니다asp.net mvc의 JSON 형식을 어떻게 바꿀 수 있습니까?

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.net MVC의 return 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"}]}]} 

내 질문 (S) : (참고 :

  • 가 어떻게 같은 더 나은 형식 C# (asp.net의 MVC) 반환 JSON을 할 수있는 데이터를 무시하고, 내 요점은 "People"을 주 컬렉션으로 반환하는 것입니다. 어떻게해야합니까? JSON.net?)

    { "사람": [{ "이름": "JC", "나이": 24, "색상": [{ "ColorId": 1, "이름" { "Name": "Albert", "Age": 83, "Colors": [{ "ColorId": 2, "Name": "ColorId": 2, "Name": "Blue"}]}, { ":"블루 "}]}]}

  • 또는 어떻게 할 수 KNOCKOUT.JS 매핑 플러그인 JSON 형식으로 이러한 유형의 사용할 수 있습니까? (녹아웃을 아는 사람들)

    [{ "이름": "JC", "나이": 24, "색상": [{ "색상 색인": 1, "이름": "빨간색" "ColorId": 2, "Name": "Blue"}]}, { "이름": "Albert", "Age": 29, "Colors" 블루 "}]}]


UPDATE (추가 설명/정보) :

이 내 데이터이고, 나는이 목록

0,123,516에게 반환 할 이 비슷한 JSON 형식으로
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 
                   } 
               } 
             }; 

는 : 즉, 가능한 경우, 또는 난 그냥 궁금 해서요

{"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을 반환하는 방법에?

답변

3

당신은 용기가 필요합니다 People 변수.(동적 사용)이 같은

뭔가 :

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

업데이트

JSON 정말 간단한 형식입니다. 당신이 지금 필요하지 않은 모든 것을 건너 뛰자.

  • 개체 : json 시작과 끝의 개체는 {}입니다. 이들 중 아무 것도 C#의 속성에 해당합니다.
  • 배열 : IEnumerable을 반환하면 배열이 반환됩니다. 배열은 다른 배열, 객체 또는 단순 필드를 포함 할 수 있습니다.

상기 C#에서 동적 객체를 사용하고 다음과 같이보고 클래스로 변환 할 수있는 코드 :

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

그러므로 그 결과 어레이 반환 객체의 :

{ People: [] } 

여기서 {}MyCustomClass에 해당합니다.

+0

와우. 나는 이것을 알아 내려고 노력하면서 시간을 보냈다. 똑똑한 한 남자의 작은 코드 조각으로 해결했다. 고마워. 네가 거기서 한 일에 대한 더 많은 정보/설명을 나에게 말할 수 있겠습니까? 어쩌면 일부 리소스, 키워드에 대한 링크 일 수도 있고 아니면 나에게 말할 수도 있니? 나는 C#과 JSON에 상당히 익숙하다. –

+0

http://www.asp.net/mvc/tutorials가 좋다. 거기에 몇 가지 JSON 및 기타 멋진 것들이 있습니다. –

+0

@JanCarloViray : 작은 업데이트를 했어 – jgauffin

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); 

어쩌면 :) 같은 당신이 배열하지만 객체를 반환하지 않기 때문에

+0

내 모델로 변환 할 수 있다면 어떨까요? 나는 약간 혼란스러워서 내 json 형식을 어떻게 바꿀 것인가. 감사합니다 –

+0

눈 가리개가있는 코딩을했는지, 예상대로 작동하기 위해 일을 변경해야 할 수도 있습니다 :) andc는 데이터를 가져 와서 "var qry = .."에 넣습니다. –

+0

저는 C#과 json에서 초보자에 불과하지만 귀하의 코드가 List (?) 유형을 반환한다고 생각하지 않습니다 ... 일부 샘플 C# 데이터에 대한 제 질문을 업데이트했습니다. 어쩌면 그것은 약간의 설명을 추가 할 수 있습니다. 도와 주셔서 다시 한 번 감사드립니다. –

관련 문제