CodenameOne:PropertyIndex.toJSON() 没有为对象列表生成正确的 JSON

CodenameOne: PropertyIndex.toJSON() not generating correct JSON for Lists of Objects

我有一个移动应用程序,用户可以在其中填写表格,比如一个事件,当他们保存时,我想将数据作为 JSON 提交给服务器。 CN1 具有使用 属性BusinessObject 轻松生成 JSON 的功能,因此我的事件定义如下:

public class Event implements PropertyBusinessObject {

public final Property<Long, Event> eventId = new Property<>("eventId");
public final Property<EventLocation, Event> eventLocation = new Property<>("eventLocation", EventLocation.class);
public final Property<List<EventItinerary>, Event> eventItineraryList = new Property<>("eventItineraryList", XXX);
private final PropertyIndex idx...

} 

EventLocation 和 EventItinerary 都实现了 属性BusinessObject,我发现当我为 Event 生成 JSON 时,EventLocation 生成的很好但不是 EventItinerary。当我尝试在上面的“XXX”部分中使用 EventItinerary.class 时,出现以下错误...

Exception: java.lang.ClassCastException - class java.util.ArrayList cannot be cast to class com.codename1.properties.PropertyBusinessObject

出现在 com.codename1.properties.PropertyIndex.toMapRepresentationImpl()

的第 484 行

当我使用 List.class 表示“XXX”或什么都没有时,即 new 属性<>("eventItineraryList");然后它发布到服务器,但 JSON 包含 class 的名称及其内存地址,即

{
"eventId": 3425567,
"eventLocation" : {
...
},
"eventItineraryList": [
"com.myapp.event.EventItinerary@cdc543c",
"com.myapp.event.EventItinerary@39987ocb",
"com.myapp.event.EventItinerary@cd5t776c",
]
}

我的问题是我应该在“XXX”中输入什么以使 EventItinerary 对象具有正确的 JSON 表示?

您需要使用 ListProperty 以便我们可以遍历它并且 ListProperty 应该引用不同的 PropertyBusinessObject。所以这应该大致如下所示:

public final ListProperty<EventItinerary, Event> eventItineraryList = new ListProperty<>("eventItineraryList", EventItinerary.class);

注意 EventItinerary.class 这很重要。通用值因擦除而丢失。该参数让我们在从 JSON.'

加载时使用正确的对象类型重建对象

同样,要使它起作用,EventItinerary 也必须是 PropertyBusinessObject