문제
ServiceStack을 사용하여 object를 json으로 serialization / deserialization 하면서 사용중인데,
분명히 DataTime.MinValue로 초기화(0001-01-01 00:00:00) 하여 저장한 변수인데,
ToJson() 후 파싱하면 출력되는 값이 0001-01-01 09:00:00 으로 변경 되어 출력되는 문제가 있었다.
찾아보니
"The TimeZone when serializing into a DateFormat that includes the TimeZone is the local timezone of the computer serializing the date. " "TimeZone을 포함하는 DateFormat으로 직렬화할 때 TimeZone은 날짜를 직렬화하는 컴퓨터의 로컬 시간대입니다" |
라는 글을 보았다.
그래서 여기 저기서 찾아서 최대한 원하는 값을 얻을 수 있게 수정하였다.
해결
"JsConfig.DateHandler = DateHandler.ISO8601;"
위의 코드를 넣으면 날짜 데이터 저장시 값을 처음 설정한 값으로 넣을 수 있다.
// membership 객체 만들고 데이터 초기화
var membership = new Membership();
membership.Name = "송중기";
membership.RegTime = DateTime.MinValue;
SimpleLogManager.Instance.Debug($"데이터 초기화 직후 : {membership.Name}, {membership.RegTime.ToString("yyyy-MM-dd HH:mm:ss")}");
// 객체 serialize (Newton.soft json 사용)
var pJson = JsonConvert.SerializeObject(membership);
SimpleLogManager.Instance.Debug($"object -> Json : {pJson}");
// 객체 deserialize
var newP = JsonConvert.DeserializeObject<Membership>(pJson);
SimpleLogManager.Instance.Debug($"Json -> object : {newP.Name}, {newP.RegTime.ToString("yyyy-MM-dd HH:mm:ss")}");
// 값 변경되지 않음..
SimpleLogManager.Instance.Debug($"");
var pJson2 = membership.ToJson();
SimpleLogManager.Instance.Debug($"object -> Json : {pJson2}");
var newP2 = JsonObject.Parse(pJson2);
// regTime값만 가져옴
var newP2RegTime = newP2.Get<DateTime>("RegTime");
SimpleLogManager.Instance.Debug($"Json -> object.RegTime : {newP2RegTime.ToString("yyyy-MM-dd HH:mm:ss")}");
// 값이 위 아래가 다름
SimpleLogManager.Instance.Debug($"");
//// 수정용 코드
JsConfig.DateHandler = DateHandler.ISO8601;
pJson2 = membership.ToJson();
SimpleLogManager.Instance.Debug($"object -> pjson2 : {pJson2}");
newP2 = JsonObject.Parse(pJson2);
newP2RegTime = newP2.Get<DateTime>("RegTime");
SimpleLogManager.Instance.Debug($"Json -> object.RegTime : {newP2RegTime.ToString("yyyy-MM-dd HH:mm:ss")}");
보면 두번째 송중기가 있는 줄은 serialize할 때 값이 변경되었고,
해결코드 이후부터는 원하는 값을 볼 수 있다.
참고)
https://forums.servicestack.net/t/strange-datetime-conversion-issues/6701
반응형
'프로그래밍 > C#' 카테고리의 다른 글
-1을 uint에 넣어서 형변환을 하면 어떻게 될까? (0) | 2024.05.07 |
---|---|
[디자인패턴]- State 패턴 (0) | 2023.03.14 |
apple client secret 생성을 위한 jwt 만들기 (0) | 2022.07.12 |
[vs] visualstudio community 버전업시 발생하는 에러. (0) | 2022.03.30 |
[C#] Nested transactions are not supported. (0) | 2021.06.07 |
댓글