我有UWP应用程序,我得到了我的json,写入列表和Binf to View
以下是View Model的代码:
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
我需要将其转换为正常日期。我怎么做这个并写回List?
所以我的问题更多的是关于如何拍摄并将其写回来。
答案 0 :(得分: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
答案 1 :(得分: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);
我可以看到它可以运行。