【问题标题】:Parse Java Date over Jackson JSON to C#通过 Jackson JSON 将 Java 日期解析为 C#
【发布时间】:2018-05-17 22:44:57
【问题描述】:

我需要使用后端的杰克逊映射器和前端的统一映射器(JsonUtility),通过 json 将 Java 日期从后端解析到 c# 前端(Unity)。

现在这两个映射器似乎不能一起工作,因为统一映射器总是无法接收正确的日期并默认为“空日期”。 我的问题是,我是否需要通过网络发送尽可能长(毫秒)的日期? 如果是这样,我的杰克逊映射器将需要一个自定义(反)序列化器 - 是否有任何性能权衡?

编辑:

代码不多解释:

Maven 依赖后端

 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.2</version>
 </dependency>

后端(在我的例子中是 spring boot)

import lombok.Data;
import java.util.Date;
@Data
public class Backend{
   private Date aDate;

  public Backend() {
  this.aDate = new Date();
  }
}

调用 REST API 时的 JSON

{
 "aDate": "2018-05-18T22:35:47.760+0000"       
}

前端(C#/Unity)

    using System;
    [Serializable]
    public class FrontEnd
    {
      public DateTime aDate;
    }

  private IEnumerator AcceptWww(WWW www)
        {
         // call made to Backend REST receiving an Backend object here
         yield return www;
        // trying to parse this to a FrontEnd object
        var dateObject = JsonUtility.FromJson<FrontEnd>(www.text);
       // date will always default to 1970
      dateObject.aDate;
        }

提前致谢,

码海

【问题讨论】:

  • 你不是新手,现在应该知道你的代码需要找出问题所在。
  • 您好程序员,没有太多代码可以解释这一点,但您仍然完全正确 - 我更新了我的问题以满足需求。

标签: java c# json unity3d jackson


【解决方案1】:
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Date aDate;

将日期作为自纪元以来的秒数通过网络传输的答案。这可以通过 C# DateTime 读取 - 但是我不知道这种方法的准确性和性能。 在 C# 上获取 long 你需要包含这样的东西来将 long 解析为 DateTime:

public static DateTime LongToDate(long javaTimeStamp)
{
    // Java timestamp is milliseconds past epoch
    var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
    return dtDateTime;
}

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 2018-01-09
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多