C#解析MongoDB的bson转成的可变数组对象中的Date数据

2019年12月17日 晴 群里的大佬都在聊ET服务器框架了 我写一个json的bug,自觉留下来加班,想到这里眼泪不自觉流下来。
原因是无法解析Date数据。
部分数据
后台log的数据
相关代码如下:
//第一步,转化为严格模式的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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值