Newtonsoft의 JSON Serializer에서 JSON DateTime 해석
Newtonsoft의 JSON 시리얼라이저를 사용하여 객체를 시리얼화했는데 Date Time은 다음과 같습니다.
/Date(1237588418563+0000)/
$.evalJSON()을 사용하면 오브젝트이지만 toUTCtring과 같은 일반적인 Date 메서드를 찾을 수 없습니다.
이걸로 뭘 할 수 있을지 생각나는 거 없어?
Json과 함께 제공되는 JsonConverter 중 하나를 사용합니다.더 나은 형식을 얻기 위해 날짜 작업을 위한 NET.JavaScriptDateTimeConverter는 자동으로 JavaScript 날짜를 제공합니다.
public class LogEntry
{
public string Details { get; set; }
public DateTime LogDate { get; set; }
}
[Test]
public void WriteJsonDates()
{
LogEntry entry = new LogEntry
{
LogDate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc),
Details = "Application started."
};
string defaultJson = JsonConvert.SerializeObject(entry);
// {"Details":"Application started.","LogDate":"\/Date(1234656000000)\/"}
string javascriptJson = JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());
// {"Details":"Application started.","LogDate":new Date(1234656000000)}
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
}
문서:JSON에서 JSON과 함께 날짜 일련화.네트워크
나는 몇몇 사람들에게 유용할 수 있는 다른 접근법을 생각해냈다.기본적으로는 필요에 따라 호출하는 독자적인 CustomDateConverter를 만듭니다.변환기는 날짜 형식(예: yyyy-MM-dd HH:mm:ss
및 TimeZoneInfo를 사용하여 UTC에서 사용자의 시간대로 날짜를 변환할 수 있습니다.
public class JSONCustomDateConverter : DateTimeConverterBase
{
private TimeZoneInfo _timeZoneInfo;
private string _dateFormat;
public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo)
{
_dateFormat = dateFormat;
_timeZoneInfo = timeZoneInfo;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(value), _timeZoneInfo).ToString(_dateFormat));
writer.Flush();
}
다음과 같이 사용할 수 있습니다.
var jsonString = JsonConvert.SerializeObject(myObject, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Converters = new List<JsonConverter>() { new JSONCustomDateConverter("yyyy-MM-dd HH:mm:ss", loggedUser.Timezone) } });
커스텀 날짜 형식만 원하는 경우 표준시와 관련된 모든 항목을 삭제할 수 있습니다.도움이 됐는지 알려주세요!
뉴턴소프트 존슨에 대해서요넷 버전 4.5r5에서는 JsonPropertyAttribute Class 클래스를 사용하고 해당 ItemConverterType 속성 속성을 설정합니다.사용방법:
// class to be serialized
public class MyClass
{
[JsonProperty(ItemConverterType = typeof(JavaScriptDateTimeConverter))]
public DateTime? DateTime1;
public DateTime? DateTime2;
}
지금까지 확인한 바와 같이 이 클래스 내의 모든 속성에 대해 DateTimeConverter가 설정되며,가 선언되기 전의 속성에 대해서도 마찬가지입니다.
같은 문제에 부딪혀 Adam 링크에서 해결책을 찾았습니다.
new Date(yourDate.substr(yourDate.indexOf("(") + 1, 13) - 0));
javascript는 날짜 객체로 쉽게 변환할 수 있는 Unix 타임스탬프처럼 보입니다.그- 0
javascript를 단순히 처리하도록 하는 것입니다.substr
정수로 출력...할 수 있을 것 같아Number()
보기 싫다면 그것도 마찬가지야죠- 0
JSON 오브젝트에는 다음과 같은 것이 포함되어 있습니다.
var data = {"CreatedDate":"/Date(1327572000000-1000)/"});
///
var oddDateTimeZone = data.CreatedDate;
var utcDateTime = oddDateTimeZone.substr(oddDateTimeZone.indexOf("(")+1, 13);
var utcZone = oddDateTimeZone.substr(oddDateTimeZone.indexOf("-")+1, 4);
var utcDateTimeZone = new Date(Number(utcDateTime)-(Number(utcZone)));
그래도 jSON 오브젝트를 수정하여 eval()이나 window[]와 같은 것을 사용하지 않고 날짜 함수가 실행되도록 하는 것이 좋습니다.아마 jQuery로.확실하진 않다.
오프셋이 다음과 같을 수 있음을 잊지 마십시오.+
뿐만 아니라-
오프셋을 위해!
죄송합니다. 조금 단순화했습니다. @ James Newton-King
string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
난 이거면 돼
언급URL : https://stackoverflow.com/questions/668488/parsing-json-datetime-from-newtonsofts-json-serializer
'IT' 카테고리의 다른 글
WordPress WooCommerce - WC_Cart 클래스를 사용하여 카트에 변수 제품 추가 (0) | 2023.02.14 |
---|---|
MongoDB에서 Elastic Search를 사용하는 방법 (0) | 2023.02.14 |
Ruby 객체 및 JSON 시리얼화(레일 없음) (0) | 2023.02.14 |
Facebook like 버튼을 사용하면 댓글 팝업이 사라지고 대신 "확인" 버튼이 나타납니다. (0) | 2023.02.14 |
React.memo 구문 문제 대신 useMemo 사용 (0) | 2023.02.14 |