2011-02-17 2 views
2

저는 처음으로 ASP.NET MVC2 사이트 용 Json.NET을 구현하고 있습니다.asp.net mvc json.net 응답

[HttpPost] 
public ActionResult FindMe(string searchFirstName, string searchLastName) 
{ 
    this.searchFirstName = searchFirstName; 
    this.searchLastName = searchLastName; 
    IEnumerable<HomePageUser> results = doSearch(); 
    bool success = (results.Count() == 0) ? false : true; 

    return Json(new 
    { 
     success = success, 
     results = results 
    }); 
} 

결과로 인해 결과 세트에있는 항목 중 하나가 열거하고 정말 텍스트 값을 원하는 사실에 문제가 있었다 아닌 숫자 하나를

내 원래의 코드는이처럼 보였다 . 또한 날짜 형식이 문제입니다.

그래서, 다음 Json.NET을 발견하고이 내 코드를 변경 :

[HttpPost] 
public JsonNetResult FindMe(string searchFirstName, string searchLastName) 
{ 
    this.searchFirstName = searchFirstName; 
    this.searchLastName = searchLastName; 
    IEnumerable<HomePageUser> results = doSearch(); 
    bool success = (results.Count() == 0) ? false : true; 

    JsonNetResult jsonNetResult = new JsonNetResult(); 
    jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 
    jsonNetResult.Data = results;// how to add success true/false info? 

    return jsonNetResult; 
} 

이 위의 두 가지 문제를 해결하지만, 지금은 기존 자바 스크립트 코드이 원활한 만드는 방법을 궁금하네요 그 모습 JSON을 기다리고 있었다 :

{ 
    "success":true, 
    "results":[{ 
     "UserId":545, 
     "FirstName":"Scott", 
     "LastName":"Roberson"}] 
} 

이 오류를 처리하는 섹션으로 이동 대, 답을 작성하기 전에 response.success에 대한 첫 번째 테스트에 저를 허용했다.

제 질문은 결과 노드 옆에 최상위 성공 json 노드를 추가하는 방법입니다.

감사합니다.

UPDATE : 자주의 경우와 마찬가지로, 질문을 작성하는 행위는 그 도현 중 하나에서 아이디어를 촉발

! 순간.

내가 추가하는 경우 :

var returnPackage = new { success = success, results = results}; 

는 지금처럼 jsonNetResult.Data이 추가 :

jsonNetResult.Data = returnPackage; 

그것은 완벽하게 작동합니다.

감사합니다. 어쨌든.

최종 코드 : 여기

[HttpPost] 
public JsonNetResult FindMe(string searchFirstName, string searchLastName) 
{ 
    this.searchFirstName = searchFirstName; 
    this.searchLastName = searchLastName; 
    IEnumerable<HomePageUser> results = doSearch(); 
    bool success = (results.Count() == 0) ? false : true; 

    var returnPackage = new { success = success, results = results}; 

    JsonNetResult jsonNetResult = new JsonNetResult(); 
    jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 
    jsonNetResult.Data = returnPackage; 

    return jsonNetResult; 
} 

답변

2

내가 내 MVC/Ajaxy 애플 리케이션에서하는 일입니다. 새로운 클래스를 정의

public class JsonResultData 
{ 
    private bool _success = true; 
    public bool Success 
    { 
     get { return _success; } 
     set { _success = value; } 
    } 

    public object Value { get; set; } 
    public List<string> Errors { get; set; } 

    public JsonResultData() 
    { 
     this.Errors = new List<string>(); 
    } 
} 

그런 다음에 반환 데이터 값을 설정합니다

jsonNetResult.Data = new JsonResultData { Value = results }; 

JsonResultData.Success 속성은 먼저 JSON 응답에서 테스트 할 것입니다. 기본값은 true이지만 서버 측 메소드에서 문제가 발생하면 false로 설정하고 다음과 같이 오류 메시지를 추가하십시오.

catch (Exception ex) 
    { 
     List<string> errors = new List<string>(); 
     errors.Add(ex.ToString()); 
     jsonNetResult.Data = new JsonResultData { Success = false, Errors = errors }; 
    }