2014-09-30 2 views
-1

JSON.NET을 사용하여 역 직렬화 프로세스 중에 JSON의 ISO 날짜 - 시간 문자열을 자동으로 double 값 (예 : epoch 초)으로 변환하는 방법이 있습니까?역 직렬화 중에 ISO 날짜를 두 배로 변환 JSON.NET

다음과 같은 클래스가 있다고 가정 해 보겠습니다.

public class Announcement 
    { 

      public string Id { get; set; } 

      public string Name {get; set;} 

      public double CreatedDateTime {get;set;} 
    } 

ISO datetime (createdDateTime)을 다음 JSON에서 자동으로 CreatedDateTimeMS로 변환하고 싶습니다. 당신이 변환 된 값을 제시하고 ScriptIgnore로 장식을위한 별도의 속성을 가지고있는 JSON 데이터에서 그것을 유지하는 속성 경우

{"id": 123, "name": "new announcement", "createdDateTime": "2014-01-05T13:15:30Z"} 
+3

예, 방법이 있습니다. 사용자 정의 JsonConverter를 작성하십시오 .... –

+0

자세한 내용과 예제를 질문에 추가했습니다. – govin

답변

2

당신은 JSON 시리얼 라이저와 덜 싸울 것입니다. 이와

public class MyClass 
{ 
    private static readonly DateTime _epoch = new DateTime(1970, 1, 1); 

    public DateTime MyDate { get; set; } 

    [ScriptIgnore] 
    public double EpochSeconds 
    { 
     get { return (MyDate - _epoch).TotalSeconds; } 
     set { MyDate = _epoch.AddSeconds(value); } 
    } 
} 

당신은 얻을 값을 설정 MyDate가 또는 EpochSeconds 중 하나를 사용할 수 있지만 항상 JSON의 날짜로 연재됩니다. 초 단위로 직렬화되도록하려면 속성을 이동하십시오.

+2

Json.Net은'[ScriptIgnore]'속성을 존중하지 않습니다. 대신에, 당신은'[JsonIgnore]'를 사용할 필요가 있습니다. –

+0

'새 DateTime (1970, 1, 1) - MyDate' ?? –

+0

'새 DateTime (1970, 1, 1) - MyDate'는 TimeSpan을 반환합니다. 일을 간단하게하고 각 호출에 대해 DateTime 구조체를 새로이 작성하지 않으려면'private static readonly DateTime _epoch = new DateTime (1970, 1, 1);과 같은 것을 선언하고 getter와 setter 내부에서이를 참조하는 것이 좋습니다. – StuffOfInterest

관련 문제