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
。
我有一个移动应用程序,用户可以在其中填写表格,比如一个事件,当他们保存时,我想将数据作为 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
。