代码之家  ›  专栏  ›  技术社区  ›  Nongthonbam Tonthoi

c newtonsoft.json无法分析日期

  •  0
  • Nongthonbam Tonthoi  · 技术社区  · 7 年前

    我正在使用 Newtonsoft.Json 在我的项目中从服务器进行JSON解析。

    public class MyObj
    {
        public DateTimeOffset TimeStamp { get; set; }
        //other fields....
    }
    

    然后:

    MyObj test = JsonConvert.DeserializeObject<MyObj>(jObject.ToString());
    

    测试:

    "TimeStamp": "2018-05-26T04:59:40:888Z" //Could not convert string to DateTimeOffset
    "TimeStamp": "2018-05-26T04:59:40:88Z"  //Could not convert string to DateTimeOffset
    "TimeStamp": "2018-05-26T14:59:40:888Z" //Could not convert string to DateTimeOffset
    "TimeStamp": "2018-05-26T14:59:40:88Z"  //Could not convert string to DateTimeOffset
    
    "TimeStamp": "2018-05-26T03:29:46.777Z" //works
    "TimeStamp": "2018-05-26T13:29:46.77Z"  //works
    "TimeStamp": "2018-05-26T03:29:46.777Z" //works
    "TimeStamp": "2018-05-26T13:29:46.77Z"  //works
    

    错误:

    newtonsoft.json.jsonreadereexception:无法将字符串转换为datetimeoffset:2018-05-27t04:59:40:887z。

    我不知道为什么会发生这种情况,因为日期来自服务器。

    编辑:

    {
      "clientTimestamp": "2018-05-27T06:08:40:688Z",
      "modifiedType": "",
      "type": "TEXT",
      "messageSize": 5,
      "roomId": "689355a0-604b-11e8-ae6a-9d170520ec46",
      "messageContent": "hello"
    }
    

    更新我终于发现了问题。我分析的不是服务器响应。我分析的是我自己的对象。说明:

    public class TempClass
    {
        public DateTime TimeStamp { get; set; }
    }
    

    不起作用

    JObject jObject = new JObject();
    jObject.Add("TimeStamp", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss:fffZ"));
    TempClass chatMessage = JsonConvert.DeserializeObject<TempClass>(jObject.ToString());
    

    作品

    JObject jObject = new JObject();
    jObject.Add("TimeStamp", DateTime.Now);
    TempClass chatMessage = JsonConvert.DeserializeObject<TempClass>(jObject.ToString());
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Tony    7 年前

    而不是 2018-05-27T06:08:40:688Z 应该是 2018-05-27T06:08:40.688Z
    (毫秒由一个点分隔) . )

    试试这个

    public class RootObject
    {
        public DateTime clientTimestamp { get; set; }
        public string modifiedType { get; set; }
        public string type { get; set; }
        public long messageSize { get; set; }
        public Guid roomId { get; set; }
        public string messageContent { get; set; }
    }
    

    然后:

    MyObj test = JsonConvert.DeserializeObject<RootObject>(jObject.ToString());
    

    事实上

    2018年5月27日06:08:40:688Z
    无法将字符串转换为日期时间:2018-05-27t06:08:40.688z

    2018年5月27日t06:08:40.688Z
    好啊

        2
  •  1
  •   Tony    7 年前

    这似乎是因为服务器中的数据没有以日期/时间的正确JSON格式发送,而您正试图对其进行反序列化。