2019年12月17日 晴 群里的大佬都在聊ET服务器框架了 我写一个json的bug,自觉留下来加班,想到这里眼泪不自觉流下来。
原因是无法解析Date数据。
相关代码如下:
//第一步,转化为严格模式的json
var jsonStrict = new MongoDB.Bson.IO.JsonWriterSettings { OutputMode = MongoDB.Bson.IO.JsonOutputMode.Strict };
JObject DAT = JObject.Parse(documont.ToJson(jsonStrict));
//第二步,获取对象可变数组
var friendInfos = DAT[“friendInfos”].ToString();
JArray friendInfoArr = (JArray)JsonConvert.DeserializeObject(friendInfos);
//第三步,遍历对象转化对象再转化时间。
for (int i = 0; i < friendInfoArr.Count; i++)
{
JObject data = JObject.Parse(friendInfoArr[i].ToString());
string id = data[“id”].ToString();
string name = data[“name”].ToString();
StateType state = (StateType)(Convert.ToInt32((data[“state”].ToString())));
var chatVals = data[“chatInfos”].ToString();
JArray chatvalues = (JArray)JsonConvert.DeserializeObject(chatVals);
List<ChatInfo> chatinfosArr = new List<ChatInfo>();
for (int j = 0; j < chatvalues.Count; j++)
{
JObject chatdata = JObject.Parse(chatvalues[j].ToString());
//Console.WriteLine("dsdsds:" + chatdata);
int typeVal = Convert.ToInt32(chatdata["type"].ToString());
ChatType type = (ChatType)typeVal;
string chat = chatdata["chat"].ToString();
DateTime time = GetStampDateTime(chatdata["time"]["$date"].ToString());
long times = long.Parse(chatdata["time"].ToString()+"0000");
TimeSpan timeSpan = new TimeSpan(times);
Console.WriteLine("TIME SS:"+timeSpan);*/
ChatInfo chatInfo = new ChatInfo(type, name1, chat, time);
chatinfosArr.Add(chatInfo);
}
FriendInfo friendInfo = new FriendInfo(id, name, state, chatinfosArr);
pd.friendInfos[i] = friendInfo;
}
相关时间 转化函数:
/// <summary>
/// 时间戳转为C#格式时间
/// </summary>
/// <param name="timeStamp">Unix时间戳格式</param>
/// <returns>C#格式时间</returns>
public static DateTime GetStampDateTime(string timeStamp)
{
DateTime time = new DateTime();
try
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
time = dtStart.Add(toNow);
}
catch
{
time = DateTime.Now.AddDays(-30);
}
return time;
}