2017-06-20 85 views
0

我UWP應用,在那裏我得到我的JSON,寫清單,BINF查看轉換Unix時間戳正常日期(UWP)

這裏是視圖模型的代碼:

public class TopPostsViewModel : INotifyPropertyChanged 
{ 
    private List<Child> postsList; 

    public List<Child> PostsList 
    { 
     get { return postsList; } 
     set { postsList = value; OnPropertyChanged(); } 
    } 

    public TopPostsViewModel() 
    { 
     Posts_download(); 
    } 


    public async void Posts_download() 
    { 
     string url = "https://www.reddit.com/top/.json?count=50"; 

     var json = await FetchAsync(url); 


     RootObject rootObjectData = JsonConvert.DeserializeObject<RootObject>(json); 
     PostsList = new List<Child>(rootObjectData.data.children); 

    } 
    private async Task<string> FetchAsync(string url) 
    { 
     string jsonString; 

     using (var httpClient = new System.Net.Http.HttpClient()) 
     { 
      var stream = await httpClient.GetStreamAsync(url); 
      StreamReader reader = new StreamReader(stream); 
      jsonString = reader.ReadToEnd(); 
     } 

     return jsonString; 
    } 

在JSON我有data.created_utc字段。例如,它就像這樣created_utc: 1446179731。我看,這是unix timestamp

這裏是我的課:Classes

我需要將其轉換爲正常的日期。我如何做到這一點,並寫回列表?

所以我的問題更多的是,如何把領域和寫回來。

+3

的[如何轉換unix時間戳爲datetime](https://stackoverflow.com/questions/28305153/how-convert-unix-timestamp-to-datetime) –

+0

不,編輯可能重複我的問題@ JericCruz – Logan

+0

@Logan你是什麼意思的「寫回來」? –

回答

3

您將不得不在Data2類中添加另一個屬性以獲取DateTime中的轉換數據。

[JsonIgnore] 
    public DateTime created_utc 
    { 
     get 
     { 
      var unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
      return unix.AddSeconds(this.created_utcUnix); 
     } 
     set 
     { 
      var unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
      this.created_utcUnix = Convert.ToInt64((value - unix).TotalSeconds); 
     } 
    } 

    [JsonProperty("created_utc")] 
    public double created_utcUnix { get; set; } 

現在,您可以隨時使用created_utcCustom在客戶端代碼

新代碼:https://pastebin.com/A4GReYHj

+0

對不起,我寫了一個花費太長時間的代碼。 – lindexi

2

雖然@saurabh有一個好辦法。但我認爲你可能想轉換它而不改變這個類。

您可以使用JsonConverter進行轉換。

public class Data2 
{ 
    [JsonConverter(typeof(UnixConvert))] 
    public DateTime created_utc{set;get;} 
} 

我有一個foo類。 foo類有一個名稱爲created_utc的屬性。

class Foo 
    { 
     [JsonConverter(typeof(UnixConvert))] 
     public DateTime created_utc { set; get; } 
    } 

UnixConvert是JsonConverter

class UnixConvert : JsonConverter 
    { 
     public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
     { 
      var time = ToUnixTimestamp((DateTime) value); 
      writer.WriteValue(time); 
     } 

     public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
     { 
      long unixTimeStamp = long.Parse(reader.Value.ToString()); 
      return UnixTimeStampToDateTime(unixTimeStamp); 
     } 

     public override bool CanConvert(Type objectType) 
     { 
      return true; 
     } 

     private static DateTime UnixTimeStampToDateTime(long unixTimeStamp) 
     { 
      System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
      dtDateTime = dtDateTime.AddSeconds(unixTimeStamp); 
      return dtDateTime; 
     } 

     public static long ToUnixTimestamp(DateTime time) 
     { 
      var date = new DateTime(1970, 1, 1, 0, 0, 0, time.Kind); 
      var unixTimestamp = System.Convert.ToInt64((time - date).TotalSeconds); 

      return unixTimestamp; 
     } 
    } 

我寫一個測試代碼:

 Foo foo = new Foo() 
     { 
      created_utc = DateTime.Now 
     }; 
     var str = JsonConvert.SerializeObject(foo); 
     foo = JsonConvert.DeserializeObject<Foo>(str); 

我可以看到它可以運行。

https://stackoverflow.com/a/28305303/6116637