2012-02-28 1 views
2

매우 간단한 질문 일 가능성이 높지만 적절한 답변을 찾을 수 없습니다. 나는 모든 속성 이름을 가진 실제 결과없이 "JsonResult"를 반환하고 싶습니다. 여기에 내가 무엇을 달성하고자하는의 작은 예입니다속성 이름없이 Json 결과를 반환하십시오.

["xbox", 
["Xbox 360", "Xbox cheats", "Xbox 360 games"], 
["The official Xbox website from Microsoft", "Codes and walkthroughs", "Games and accessories"], 
["http://www.xbox.com","http://www.example.com/xboxcheatcodes.aspx", "http://www.example.com/games"]] 

예, 아주 보통의 소스 코드가 이미 존재,하지만 난이 어떤 관련성이 의심. 그러나 여기있다 :

여기
public JsonResult OpensearchJson(string search) 
{ 
    /* returns some domain specific IEnumerable<> of a certain class */ 
    var entites = DoSomeSearching(search); 

    var names = entities.Select(m => new { m.Name }); 
    var description = entities.Select(m => new { m.Description }); 
    var urls = entities.Select(m => new { m.Url }); 
    var entitiesJson = new { search, names, description, urls }; 
    return Json(entitiesJson, JsonRequestBehavior.AllowGet); 
} 

답변

5

당신은 이동 :

public ActionResult OpensearchJson(string search) 
{ 
    /* returns some domain specific IEnumerable<> of a certain class */ 
    var entities = DoSomeSearching(search); 

    var names = entities.Select(m => m.Name); 
    var description = entities.Select(m => m.Description); 
    var urls = entities.Select(m => m.Url); 
    var entitiesJson = new object[] { search, names, description, urls }; 
    return Json(entitiesJson, JsonRequestBehavior.AllowGet); 
} 

UPDATE :

public ActionResult OpensearchJson(string search) 
{ 
    var entities = new[] 
    { 
     new { Name = "Xbox 360", Description = "The official Xbox website from Microsoft", Url = "http://www.xbox.com" }, 
     new { Name = "Xbox cheats", Description = "Codes and walkthroughs", Url = "http://www.example.com/xboxcheatcodes.aspx" }, 
     new { Name = "Xbox 360 games", Description = "Games and accessories", Url = "http://www.example.com/games" }, 
    }; 

    var names = entities.Select(m => m.Name); 
    var description = entities.Select(m => m.Description); 
    var urls = entities.Select(m => m.Url); 
    var entitiesJson = new object[] { search, names, description, urls }; 
    return Json(entitiesJson, JsonRequestBehavior.AllowGet); 
} 
:

및 실제 저장소없이 테스트하는 참을성이 그 사람들을 위해

반환 :

[ 
    "xbox", 
    [ 
     "Xbox 360", 
     "Xbox cheats", 
     "Xbox 360 games" 
    ], 
    [ 
     "The official Xbox website from Microsoft", 
     "Codes and walkthroughs", 
     "Games and accessories" 
    ], 
    [ 
     "http://www.xbox.com", 
     "http://www.example.com/xboxcheatcodes.aspx", 
     "http://www.example.com/games" 
    ] 
] 

정확히 예상되는 JSON입니다.

+0

'entitiesJson'을 배열로 바꾸는 것이 왜 아무 것도 해결하지 못하는 이유는 무엇입니까? – gdoron

+1

@ gdoron, 왜냐하면 Json 메소드가 사용하는'JavaScripSerializer'가 제공된 모델 타입을 반영하기 때문입니다. 묻기 전에 코드를 사용해보십시오. 내 업데이트가 더 나은 이해를 도울 수 있습니다. –

+0

안녕하세요. 늦은 답변 죄송합니다. 이것은 내가 찾고 있었던 바로 그 것이다. 나는 그것을 나의 환경에서 시험했고, 매력처럼 작동한다. 나는이 질문을 몇 분 더 열어두고 있습니다. 누군가 다른 영리한 해결책을 생각해 내고 닫는 것일 수도 있습니다. 나는 너의 노력에 정말로 감사한다. 고맙습니다. – UnclePaul