C \ # 학습 노트 - C \ # 중 JSon. Net (newtonjs) 사용

5484 단어 C \ # 학습 노트
우선 뉴 튼 제 이 슨 에 대해 간단히 알 아 보 겠 습 니 다.MVC 프로젝트 가 있다 고 가정 하면 전통 적 으로 프론트 데스크 에 JSon 의 데 이 터 를 전송 합 니 다. 예 를 들 어 DateTime 날짜 유형 은 프론트 데스크 에서 출력 한 후에 어 지 러 운 디지털 형식 으로 표 시 될 수 있 습 니 다. 예 를 들 어 '/ Date (1503125172800) /' 를 보면 프로그래머 는 이 어 지 러 운 결 과 를 보면 어 지 럽 습 니 다.마이크로소프트 는 이 를 정확 한 날짜 형식 으로 해석 할 수 있 는 다른 방법 이 있다 고 공식 적 으로 설명 하지만 귀 찮 기도 하 다.실제로 이런 상황 을 피 하 는 더 좋 은 방법 이 있다.즉, 제 이 슨 넷 (newtonjs) 입 니 다. 이것 은 넷 에서 사용 빈도 가 매우 높 은 제 이 슨 라 이브 러 리 입 니 다.
1. 전통 적 인 방식 에서 제 이 슨 이 프론트 데스크 에 데 이 터 를 전송 하 는 작업
1. MVC 프로젝트 를 새로 만 들 고 Models 폴 더 에 실체 클래스 Person. cs 를 추가 합 니 다. 자세 한 코드 는 다음 과 같 습 니 다.
public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime BirthDate { get; set; }//    
    }

2. 컨트롤 러 Default Controller 를 추가 하고 컨트롤 러 에 과부하 관계 가 있 는 action 두 개 를 추가 합 니 다.action 의 이름 은 모두 TestJSon 입 니 다. 자세 한 코드 는 다음 과 같 습 니 다.
        [HttpGet]
        public ActionResult TestJson()
        {
            return View();
        }

        [HttpPost]
        public ActionResult TestJson(FormCollection fc)
        {
            Person per = new Person() { BirthDate = DateTime.Now, Id = 5, Name = "  " };
            return Json(Person);
        }

주의: 이곳 의 FormCollection fc 는 이번 연습 에서 아무런 의미 가 없 으 며, 단지 두 가지 방법 으로 무 거 운 짐 을 구성 하기 위해 서 입 니 다.[HttpGet] 과 [HttpPost] 의 용법 을 잘 아 는 사람 은 이곳 이 무 거 운 짐 을 구성 하 는 장점 이 무엇 인지 알 아야 한다. 여 기 는 상세 하 게 설명 하지 않 겠 다.
3. 보기 TestJSon. cshtml 를 추가 하여 보기 에 jquery - 1.8.3. js 파일 을 도입 합 니 다. ajax 로 데 이 터 를 제출 하고 받 아야 하기 때 문 입 니 다.중요 코드 는 다음 과 같 습 니 다.

    
        $(function () {
            $("#btn1").click(function () {
                $.ajax({
                    url: "/Default/TestJson", dataType: "json", type: "post",
                    success: function (data) {
                        alert(data.Name);
                        alert(data.BirthDate);
                    }, error: function () {
                        alert('error json');
                    }
                });
            });
        });
    

4. 항목 을 실행 합 니 다. 테스트 에 오류 가 없 으 면 Name 과 BirthDate 의 정 보 를 순서대로 팝 업 창 에 표시 합 니 다.
5. 위 는 일반적인 제 이 슨 이 데 이 터 를 전달 하 는 방식 이다.이제 제 이 슨 넷 (즉 뉴 톤 js) 으로 제 이 슨 데 이 터 를 전달 합 니 다.위의 코드 는 여전히 보존 되 어 있 으 니, 잠시 후에 부분 수정 을 하 겠 습 니 다.
둘째, JSon. Net (즉 newtonjs) 로 JSon 데 이 터 를 전달 합 니 다.
1. 프로젝트 에 JSon. Net 을 명령 으로 설치 하고 패키지 관리자 콘 솔 에 명령 을 입력 합 니 다.
Install-Package newtonsoft.json
MVC 프로젝트 에 필요 한 파일 을 설치 합 니 다.물론 이 동작 을 대체 하 는 간단 한 방법 도 있다. 라 이브 러 리 파일 인 Newtonsoft. JSon. dll 을 직접 인용 하 는 것 도 같은 효 과 를 거 둘 수 있다.파일 다운로드 주소:https://www.newtonsoft.com/json
2. JSonNetResult. cs 클래스 를 새로 만 들 고 JSonResult. cs 클래스 에서 계승 합 니 다.실제로 JSonResult. cs 클래스 의 정의 로 넘 어가 면 이 클래스 가 Action Result 클래스 에서 계승 되 는 것 을 볼 수 있 기 때문에 여 기 는 JSonResult 클래스 에서 계승 되 며 사용자 정의 Action Result 에 해당 합 니 다.아래 의 코드 는 외 워 쓸 필요 가 없습니다. 사용 할 줄 만 알 면 됩 니 다. 상세 한 코드 는 다음 과 같 습 니 다.
public class JsonNetResult : JsonResult
    {
        public JsonNetResult()
        {
            Settings = new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                DateFormatString = "yyyy-MM-dd HH:mm:ss",
                ContractResolver = new 
Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
            };
        }

        public JsonSerializerSettings Settings { get; private set; }

        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet
            && string.Equals(context.HttpContext.Request.HttpMethod, "GET", 

StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidOperationException("JSON GET is not allowed");
            }
            HttpResponseBase response = context.HttpContext.Response;
            response.ContentType = string.IsNullOrEmpty(this.ContentType) ? 

"application/json" : this.ContentType;
            if (this.ContentEncoding != null)
            {
                response.ContentEncoding = this.ContentEncoding;
            }
            if (this.Data == null)
            {
                return;
            }
            var scriptSerializer = JsonSerializer.Create(this.Settings);
            scriptSerializer.Serialize(response.Output, this.Data);
        }
    }

3. TestJSon. cshtml 보기에 서 두 속성의 이니셜 을 소문 자로 변경 합 니 다.백 스테이지 에서 처 리 된 제 이 슨 형식의 내용 에서 속성의 이니셜 은 모두 소문 자로 바 뀌 었 기 때문에 프론트 데스크 도 이에 상응하는 변경 을 해 야 한다.자세 한 변경 코드 는 다음 과 같 습 니 다.
alert(data.name); alert(data.birthDate);
4. [HttpPost] 의 TestJSon 방법 을 표시 하고 return JSon (Person) 을 표시 합 니 다.return new JSonNetResult () {Data = per} 로 변경;이 때 다시 실행 하면 name 의 값 을 출력 할 수 있 을 뿐만 아니 라 birthDate 의 값 도 정상 적 인 날짜 형식 으로 변 환 된 것 을 발견 할 수 있 습 니 다.
5. 【 보충 】
JsonNetResult. cs 클래스 에 DateFormattString = "yyy - MM - dd HH: mm: ss" 가 있 습 니 다. 이 문자열 의 형식 은 날짜 형식 으로 바 꿀 것 입 니 다. 여 기 는 완전한 년 월 일 분 초 입 니 다. 물론 원 하 는 날짜 형식 으로 바 꿀 수 있 습 니 다. 예 를 들 어 년 월 일 형식 만 있 으 면 yy - MM - dd 입 니 다.

좋은 웹페이지 즐겨찾기