gpt4 book ai didi

java - 将 DateTimeOffset 从 Android 发送到 .NET Web API

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:05 24 4
gpt4 key购买 nike

我正在使用适用于 Android 的 Azure 移动应用 SDK。

public class MyClass {
public String Id;
public String Code;
public DateTimeOffset ClientCreatedAt;
}

MyClass myClass = new MyClass();
myClass.Id = "1234567890";
myClass.Code = "dfgdrvyet";
myClass.ClientCreatedAt = new DateTimeOffset(new Date());

它的使用如下:

MobileServiceSyncTable<MyClass> myClassSyncTable = _client.getSyncTable(MyClass.class);
ListenableFuture<MyClass> responseFuture = myClassSyncTable.insert(myClass);

插入后,ClientCreatedAt 设置为 null,当我调查插入语句时,库中的 Gson 没有序列化 DatetimeOffset,具体来说,这一行:

JsonObject json = mClient.getGsonBuilder().create().toJsonTree(item).getAsJsonObject();

当我将 DateTimeOffset 替换为 Date 时,该值已正确序列化。

所以,我的问题是:

  1. 我是否打算在 Azure 移动应用程序中使用 DateTimeOffset?如果是,正确的使用方法是什么?
  2. 我可以强制 Gson 正确序列化 DateTimeOffset 吗?我查看了 Gson 注释,但没有任何帮助。我不确定是否应该为序列化和反序列化创建 getter 和 setter。

最佳答案

DateTimeOffset 实际上是 Date 的一个愚蠢的包装器。这是它的全部内容。

/**
* Represents a point in time, typically expressed as a date and time of day
*/
public class DateTimeOffset extends Date {

public DateTimeOffset(Date date) {
this.setTime(date.getTime());
}
}

我举起双手,决定改用字符串,并通过 DateTime.parse(string) 使用 joda-time 的 DateTime 类来处理它们。

然而,更好的选择可能是通过 MobileServiceClient.registerSerializer(...) 注册您自己的序列化器,但您不会从使用它们的包装器中获得任何有用的东西。

这个 SDK 是垃圾。

编辑:使用自定义(反)序列化器似乎工作得很好:

private class DateTimeSerialiser implements JsonSerializer<DateTime>, JsonDeserializer<DateTime> {
@Override
public JsonElement serialize(final DateTime src, final Type typeOfSrc, final JsonSerializationContext context) {
return new JsonPrimitive(src.toString());
}

@Override
public DateTime deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
return DateTime.parse(json.getAsString());
}
}

将其设置为反序列化/序列化到/从您选择的对象,然后通过 MobileServiceClient.registerSerializer + registerDeserializer 设置它的一个实例。如果使用本地同步,只需使用 ColumnDataType.StringColumnDataType.DateTimeOffset(它只是底层的 String)。现在您可以将您的字段设置为您想要的类型。

private DateTime date;

关于java - 将 DateTimeOffset 从 Android 发送到 .NET Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com