ASPNET 에서 JSON 의 서열 화 와 반 서열 화 방법
JSON(JavaScript Object Notation,JavaScript 대상 표현법)은 경량급 데이터 교환 형식 이다.
JSON 은'명 치 쌍'의 집합 이다.구 조 는 대괄호'{}',중 괄호'[]',쉼표',',사칭':',작은 따옴표'''로 구성 되 어 있 으 며,포 함 된 데이터 형식 은 Object,Number,Boolean,String,Array,NULL 등 이 있 습 니 다.
JSON 은 다음 과 같은 형식 을 가지 고 있 습 니 다.
대상(Object)은 무질서 한"이름 값 쌍"집합 입 니 다.한 대상 은"{"로 시작 합 니 다."}"로 끝 납 니 다."이름"마다 하나씩 따라 갑 니 다."여러 개의"이름 값 쌍"은 쉼표 로 구 분 됩 니 다.예:
var user={"name":" ","gender":" ","birthday":"1980-8-8"}
배열(Array)은 값 의 질서 있 는 집합 입 니 다.한 배열 은'['로 시작 하여']'로 끝나 고 값 사이 에','로 구 분 됩 니 다.예:
var userlist=[{"user":{"name":" ","gender":" ","birthday":"1980-8-8"}},{"user":{"name":" ","gender":" ","birthday":"1985-5-8"}}];
문자열(String)은 두 따옴표 로 둘러싸 인 임의의 유 니 코드 문자 의 집합 으로 반사 선 전 의 를 사용 합 니 다.2.JSON 데이터 에 대해 직렬 화 와 반 직렬 화
DataContractJSonSerializer 클래스 를 사용 하여 형식 인 스 턴 스 를 JSON 문자열 로 정렬 하고 JSON 문자열 을 형식 인 스 턴 스 로 역 정렬 할 수 있 습 니 다.DataContractJSonSerializer 는 SystemRuntime SerializationJSon 네 임 스페이스 에서 NET Framework 5 는 SystemServiceModelWebdll 에 포함 되 어 있 으 며 인용 을 추가 해 야 합 니 다.NET Framework 4 는 SystemRuntime Serialization 에 있 습 니 다.
DataContractJSonSerializer 직렬 화 와 반 직렬 화 된 코드 를 이용 합 니 다.
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemRuntimeSerializationJson;
using SystemIO;
using SystemText;
/// <summary>
/// JSON
/// </summary>
public class JsonHelper
{
/// <summary>
/// JSON
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
serWriteObject(ms, t);
string jsonString = EncodingUTFGetString(msToArray());
msClose();
return jsonString;
}
/// <summary>
/// JSON
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(EncodingUTFGetBytes(jsonString));
T obj = (T)serReadObject(ms);
return obj;
}
}
직렬 화 데모:단순 대상 Person:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
JSON 문자열 로 정렬:
protected void Page_Load(object sender, EventArgs e)
{
Person p = new Person();
pName = " ";
pAge = 28;
string jsonString = JsonHelperJsonSerializer<Person>(p);
ResponseWrite(jsonString);
}
출력 결과:
{"Age":28,"Name":" "}
역 직렬 화 데모:
protected void Page_Load(object sender, EventArgs e)
{
string jsonString = "{\"Age\":28,\"Name\":\" \"}";
Person p = JsonHelper.JsonDeserialize<Person>(jsonString);
}
실행 결과:ASP.NET 의 JSON 직렬 화 와 반 직렬 화 는 JavaScriptSerializer 도 사용 할 수 있 습 니 다.System.Web.script.Serializatioin 네 임 스페이스 에서 System.Web.Extensions.dll 을 참조 하 셔 야 합 니 다.JSON.NET 도 사용 하 실 수 있 습 니 다.
3.JSON 직렬 화 와 반 직렬 화 날짜 시간의 처리
JSON 형식 은 날짜 와 시간 을 직접 지원 하지 않 습 니 다.DateTime 값 은'/Date(700000+0500)/'형식의 JSON 문자열 로 표 시 됩 니 다.이 중 첫 번 째 숫자(제 공 된 예제 에서 700000)는 GMT 시간 대 에서 1970 년 1 월 1 일 자정 이후 정상 시간(비 여름 시간)으로 지 나 는 밀리초 입 니 다.이 숫자 는 이전의 시간 을 나타 내기 위해 마이너스 일 수 있다.예 를 들 어'+0500'부분 을 선택 할 수 있 습 니 다.이 시간 은 Local 형식 에 속 하 는 것 을 표시 합 니 다.즉,역 직렬 화 할 때 로 컬 시간 대 로 전환 해 야 합 니 다.이 부분 이 없 으 면 시간 을 거꾸로 Utc 로 정렬 합 니 다.
Person 클래스 수정,LastLoginTime 추가:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime LastLoginTime { get; set; }
}
Person p = new Person();
p.Name = " ";
p.Age = 28;
p.LastLoginTime = DateTime.Now;
string jsonString = JsonHelper.JsonSerializer<Person>(p);
직렬 화 결과:
{"Age":28,"LastLoginTime":"\/Date(1294499956278+0800)\/","Name":" "}
1.배경 에서 정규 표현 식 을 사용 하여 교체 처리 합 니 다.JSonHelper 수정:
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemRuntimeSerializationJson;
using SystemIO;
using SystemText;
using SystemTextRegularExpressions;
/// <summary>
/// JSON
/// </summary>
public class JsonHelper
{
/// <summary>
/// JSON
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
serWriteObject(ms, t);
string jsonString = EncodingUTFGetString(msToArray());
msClose();
// Json Date
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonString = regReplace(jsonString, matchEvaluator);
return jsonString;
}
/// <summary>
/// JSON
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
// "yyyy-MM-dd HHmmss" "\/Date(1294499956278+0800)\/"
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}\d{2}\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
jsonString = regReplace(jsonString, matchEvaluator);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(EncodingUTFGetBytes(jsonString));
T obj = (T)serReadObject(ms);
return obj;
}
/// <summary>
/// Json /Date(1294499956278+0800)
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = stringEmpty;
DateTime dt = new DateTime(1970,1,1);
dt = dtAddMilliseconds(longParse(mGroups[1]Value));
dt = dtToLocalTime();
result = dtToString("yyyy-MM-dd HHmmss");
return result;
}
/// <summary>
/// Json
/// </summary>
private static string ConvertDateStringToJsonDate(Match m)
{
string result = stringEmpty;
DateTime dt = DateTimeParse(mGroups[0]Value);
dt = dtToUniversalTime();
TimeSpan ts = dt - DateTimeParse("1970-01-01");
result = stringFormat("\\/Date({0}+0800)\\/",tsTotalMilliseconds);
return result;
}
}
직렬 화 데모:
Person p = new Person();
p.Name = " ";
p.Age = 28;
p.LastLoginTime = DateTime.Now;
string jsonString = JsonHelper.JsonSerializer<Person>(p);
실행 결과:
{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":" "}
역 직렬 화 데모:
string json = "{\"Age\":28,\"LastLoginTime\":\"2011-01-09 00:30:00\",\"Name\":\" \"}";
p=JsonHelper.JsonDeserialize<Person>(json);
실행 결과:배경 에서 문자열 을 바 꾸 는 것 은 적용 범위 가 좁 아 글로벌 화 된 다양한 언어 를 고려 하면 더욱 번 거 로 울 수 있다.
2.JavaScript 로 처리
function ChangeDateFormat(jsondate) {
jsondate = jsondate.replace("/Date(", "").replace(")/", "");
if (jsondate.indexOf("+") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("+"));
}
else if (jsondate.indexOf("-") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("-"));
}
var date = new Date(parseInt(jsondate, 10));
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) date.getMonth() + 1;
var currentDate = date.getDate() < 10 ? "0" + date.getDate() date.getDate();
return date.getFullYear() + "-" + month + "-" + currentDate;
}
간단 한 데모:ChangeDateFormat("\/Date(1294499956278+0800)\/");
결과:
2011-1-8
4.JSON 직렬 화 와 반 직렬 화 집합,사전,배열 의 처리
JSON 데이터 에서 모든 집합,사전,배열 은 배열 로 표시 된다.
List
List<Person> list = new List<Person>()
{
new Person(){ Name=" ", Age=28},
new Person(){ Name=" ", Age=25}
};
string jsonString = JsonHelper.JsonSerializer<List<Person>>(list);
직렬 화 결과:
"[{\"Age\":28,\"Name\":\" \"},{\"Age\":25,\"Name\":\" \"}]"
사전 은 JSON 에 직접 사용 할 수 없 으 며,Dictionary 사전 이 JSON 으로 전 환 된 것 은 원래 의 사전 형식 과 일치 하 는 것 이 아니 라 형식 은 Dictionary 의 Key 를 명칭'Key'의 값 으로 하고,Dictionary 의 Value 를 명칭'Value'의 값 으로 한다.예:
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("Name", " ");
dic.Add("Age", "28");
string jsonString = JsonHelper.JsonSerializer < Dictionary<string, string>>(dic);
직렬 화 결과:
"[{\"Key\":\"Name\",\"Value\":\" \"},{\"Key\":\"Age\",\"Value\":\"28\"}]"
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Log4Net 사용 설명 (계속)예 를 들 어 log4net 을 이용 하여 로그 정 보 를 파일, 콘 솔, Windows 이벤트 로그 와 데이터 베이스 (MS SQL Server, Access, Oracle 9i, Oracle 8i, DB2, SQ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.