ABP 입문 시리즈 의 JSon 포맷
1.제 이 슨 은 뭐 하 는 사람 이에 요?
JSON(JavaScript Object Notation)은 경량급 데이터 교환 형식 이다.사람 이 읽 고 쓰기 쉽다.기계 적 으로 해석 하고 생 성 하기 도 쉽다.JSON 은 언어 에 완전히 독립 된 텍스트 형식 을 사용 하지만 C 언어 가족 과 유사 한 습관(C,C++,C\#,Java,JavaScript,Perl,Python 등 포함)도 사용 했다.이러한 특성 들 은 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.
JSon 은 일반적으로 다음 과 같이 표시 합 니 다.
이름/값 쌍:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
배열:
{ "people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}
2.Asp.net Mvc 의 JSonResultAsp.net mvc 에 서 는 기본적으로 JSonResult 를 제공 하여 JSon 형식 데 이 터 를 되 돌려 야 하 는 상황 을 처리 합 니 다.
일반적으로 우 리 는 이렇게 사용 할 수 있다.
public ActionResult Movies()
{
var movies = new List<object>();
movies.Add(new { Title = "Ghostbusters", Genre = "Comedy", ReleaseDate = new DateTime(2017,1,1) });
movies.Add(new { Title = "Gone with Wind", Genre = "Drama", ReleaseDate = new DateTime(2017, 1, 3) });
movies.Add(new { Title = "Star Wars", Genre = "Science Fiction", ReleaseDate = new DateTime(2017, 1, 23) });
return Json(movies, JsonRequestBehavior.AllowGet);
}
그 중에서 도 JSon()은 Controller 기본 클래스 에서 제공 하 는 가상 방법 이다.돌아 온 json 결 과 를 포맷 하면:
[
{
"Title": "Ghostbusters",
"Genre": "Comedy",
"ReleaseDate": "\/Date(1483200000000)\/"
},
{
"Title": "Gone with Wind",
"Genre": "Drama",
"ReleaseDate": "\/Date(1483372800000)\/"
},
{
"Title": "Star Wars",
"Genre": "Science Fiction",
"ReleaseDate": "\/Date(1485100800000)\/"
}
]
돌아 온 제 이 슨 결 과 를 자세히 살 펴 보면 다음 과 같은 몇 가지 부족 한 점 이 있다.되 돌아 오 는 필드 의 대소 문 자 는 코드 와 일치 합 니 다.이 는 전단 에서 도 코드 와 일치 하 는 대소 문자 로 값 을 추출 해 야 합 니 다(item.Title,item.Genre,item.ReleaseDate).
성공 실패 정 보 는 포함 되 지 않 습 니 다.요청 이 성 공 했 는 지 판단 하려 면 json 패 킷 의 length 를 수 동 으로 가 져 와 야 합 니 다.
돌아 오 는 날 짜 는 포맷 되 지 않 았 습 니 다.전단 에서 출력 을 자체 포맷 해 야 합 니 다.
3.Abp 에서 JSon 에 대한 패키지
그래서 Abp 는 AbpJSonResult 를 봉인 하여 JSonResult 에 계승 하 였 는데 그 중에서 주로 두 가지 속성 을 추가 하 였 습 니 다.
CamelCase:크 고 작은 낙타 봉(기본 값 은 true,즉 작은 낙타 봉 형식)
Indented:들 여 쓸 지 여부(기본 값 은 false,포맷 되 지 않 음)
또한 AbpController 에 Controller 의 JSon()방법 을 다시 불 러 와 되 돌아 오 는 모든 JSon 형식 데 이 터 를 AbpJSonResult 형식 으로 강제 하고 AbpJSon()의 가상 방법 을 제공 했다.
/// <summary>
/// Json the specified data, contentType, contentEncoding and behavior.
/// </summary>
/// <param name="data">Data.</param>
/// <param name="contentType">Content type.</param>
/// <param name="contentEncoding">Content encoding.</param>
/// <param name="behavior">Behavior.</param>
protected override JsonResult Json(object data, string contentType,
Encoding contentEncoding, JsonRequestBehavior behavior)
{
if (_wrapResultAttribute != null && !_wrapResultAttribute.WrapOnSuccess)
{
return base.Json(data, contentType, contentEncoding, behavior);
}
return AbpJson(data, contentType, contentEncoding, behavior);
}
protected virtual AbpJsonResult AbpJson(
object data,
string contentType = null,
Encoding contentEncoding = null,
JsonRequestBehavior behavior = JsonRequestBehavior.DenyGet,
bool wrapResult = true,
bool camelCase = true,
bool indented = false)
{
if (wrapResult)
{
if (data == null)
{
data = new AjaxResponse();
}
else if (!(data is AjaxResponseBase))
{
data = new AjaxResponse(data);
}
}
return new AbpJsonResult
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior,
CamelCase = camelCase,
Indented = indented
};
}
ABP 에서 콘 트 롤 러 로 AbpController 를 계승 하고 return JSon()을 직접 사용 하면 JSon 결 과 를 포맷 합 니 다.
{
"result": [
{
"title": "Ghostbusters",
"genre": "Comedy",
"releaseDate": "2017-01-01T00:00:00"
},
{
"title": "Gone with Wind",
"genre": "Drama",
"releaseDate": "2017-01-03T00:00:00"
},
{
"title": "Star Wars",
"genre": "Science Fiction",
"releaseDate": "2017-01-23T00:00:00"
}
],
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
그 중에서 result 는 코드 에서 되 돌아 오 는 데 이 터 를 지정 합 니 다.다른 키 쌍 은 ABP 로 봉 인 된 것 으로 인증 여부,성공 여부,오류 정보,목표 Url 을 포함 합 니 다.이 몇 개의 매개 변 수 는 매우 sweet 하지 않 습 니까?return AbpJSon()을 호출 하여 인 자 를 지정 하여 json 포맷 출력 을 할 수도 있 습 니 다.
자세히 살 펴 보면 날짜 형식 이 이상 하 다.2017-01-23T 00:00:00 에 T 가 하나 더 생 겼 어 요.AbpJSonReult 소스 코드 를 보 니 Newtonsoft.JSon 직렬 화 구성 요소 의 JSonConvert.SerializeObject(obj,settings)가 호출 되 었 습 니 다.서열 화 를 진행 하 다.
Newtonsoft.JSon 홈 페이지 소개 보기,날짜 포맷 출력,IsoDateTimeConverter 의 DateTimeFormat 을 지정 하면 됩 니 다.
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
JsonConvert.SerializeObject(dt, Formatting.Indented, timeFormat)
그럼 저희 Abp 에서 이 DateTimeFormat 을 어떻게 지정 하나 요?ABP 에 서 는 AbpDateTimeConverter 류 를 제공 하여 IsoDateTimeConverter 에서 계승 합 니 다.
그러나 ABP 에 통 합 된 JSon 직렬 화 확장 클래스 를 보십시오.
public static class JsonExtensions
{
/// <summary>Converts given object to JSON string.</summary>
/// <returns></returns>
public static string ToJsonString(this object obj, bool camelCase = false, bool indented = false)
{
JsonSerializerSettings settings = new JsonSerializerSettings();
if (camelCase)
settings.ContractResolver = (IContractResolver) new CamelCasePropertyNamesContractResolver();
if (indented)
settings.Formatting = Formatting.Indented;
settings.Converters.Insert(0, (JsonConverter) new AbpDateTimeConverter());
return JsonConvert.SerializeObject(obj, settings);
}
}
분명히 DateTimeFormat 을 지정 하지 않 았 습 니 다.그러면 우 리 는 스스로 시작 할 수 밖 에 없습니다.구체 적 인 코드 는 참고 하 십시오json 날짜 형식 문 제 를 해결 하 는 네 번 째 방법이상 이 발생 했 을 때,Abp 가 되 돌아 오 는 JSon 포맷 출력 은 다음 과 같 습 니 다.
{
"targetUrl": null,
"result": null,
"success": false,
"error": {
"message": "An internal error occured during your request!",
"details": "..."
},
"unAuthorizedRequest": false
}
abp 가 필요 없 이 제 이 슨 에 게 소 포 를 포장 하면 어떻게 합 니까?간단 하 다방법 에[Dont Wrap Result]특성 만 표시 하면 됩 니 다.이 기능 은 사실 ABP 에 AbpJSonResult 로 나 를 감 싸 지 말 라 는 단축 키 입 니 다.원본 코드 를 보면 알 수 있 습 니 다.
namespace Abp.Web.Models
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)]
public class DontWrapResultAttribute : WrapResultAttribute
{
/// <summary>
/// Initializes a new instance of the <see cref="DontWrapResultAttribute"/> class.
/// </summary>
public DontWrapResultAttribute()
: base(false, false)
{
}
}
/// <summary>
/// Used to determine how ABP should wrap response on the web layer.
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)]
public class WrapResultAttribute : Attribute
{
/// <summary>
/// Wrap result on success.
/// </summary>
public bool WrapOnSuccess { get; set; }
/// <summary>
/// Wrap result on error.
/// </summary>
public bool WrapOnError { get; set; }
/// <summary>
/// Log errors.
/// Default: true.
/// </summary>
public bool LogError { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="WrapResultAttribute"/> class.
/// </summary>
/// <param name="wrapOnSuccess">Wrap result on success.</param>
/// <param name="wrapOnError">Wrap result on error.</param>
public WrapResultAttribute(bool wrapOnSuccess = true, bool wrapOnError = true)
{
WrapOnSuccess = wrapOnSuccess;
WrapOnError = wrapOnError;
LogError = true;
}
}
}
AbpResultFilter 와 AbpExceptionFilter 필터 에 서 는 Wrap ResultAttribute,Dont Wrap ResultAttribute 특성 에 따라 필터 링 을 합 니 다.4.JSon 날짜 포맷
첫 번 째 방법:전단 JS 변환:
// json
function showDate(jsonDate) {
var date = new Date(jsonDate);
var formatDate = date.toDateString();
return formatDate;
}
두 번 째 방법:Abp 의 WepApi Module(모듈)에서 JSonFormatter 의 시간 서열 화 시간 형식 을 지정 합 니 다.
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString ="yyyy-MM-dd HH:mm:ss";
PS:이 방법 은 WebApi 에 만 유효 합 니 다.총결산
이 절 은 주로 다음 과 같은 몇 가지 문 제 를 설명 했다.
Asp.net 에서 JSonResult 의 실현.
ABP 는 JSonResult 의 재 패 키 징 을 지원 합 니 다.지정 한 크기 의 낙타 봉 과 들 여 쓰기 여 부 를 JSon 포맷 할 수 있 습 니 다.
DateTime 형식의 대상 을 포맷 하여 출력 하 는 방법 입 니 다.
웹 층 은 AbpJSonResult 를 확장 하여 시간 형식 을 지정 합 니 다.
전단,JSon 날 짜 를 js 의 Date 형식 으로 변환 한 다음 출력 을 포맷 합 니 다.
WebApi,Moduel 에서 DateFormattString 을 지정 합 니 다.
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 ABP 입문 시리즈 의 JSon 포맷 입 니 다.여러분 께 도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
확장-JsonFileJson 형식은 사물을 정의하는 놀라운 방법이므로 개발자는 엔티티를 설명하기 위해 코드 저장소에 Json 형식을 자주 사용합니다. Devops는 또한 json 파일을 사용하여 애플리케이션 또는 기타 항목을 구성합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.