当我尝试将xml反序列化为java对象时,我遇到了异常。
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter $ UnknownFieldException:没有这样的字段xmlserializer.EntityFields.EntityFields。
我在以下链接中看到了您的解决方案,但它对我不起作用: UnknownFieldException - No such field
package xmlserializer;
public class EntityFields {
private List<EntityField> entityFields = new ArrayList<EntityField>();
public List<EntityField> getEntityFields() {
return entityFields;
}
public void setEntityFields(List<EntityField> entityFields) {
this.entityFields = entityFields;
}
}
package xmlserializer;
public class EntityField {
private String FieldName;
private String FieldDisplayName;
private String FieldType;
private boolean IsMultivalued = false;
public String getFieldName() {
return FieldName;
}
public void setFieldName(String fieldName) {
FieldName = fieldName;
}
public String getFieldDisplayName() {
return FieldDisplayName;
}
public void setFieldDisplayName(String fieldDisplayName) {
FieldDisplayName = fieldDisplayName;
}
public String getFieldType() {
return FieldType;
}
public void setFieldType(String fieldType) {
FieldType = fieldType;
}
public boolean getIsMultivalued() {
return IsMultivalued;
}
public void setIsMultivalued(boolean isMultivalued) {
IsMultivalued = isMultivalued;
}
}
主要课程:
xstream.alias("EntityField", EntityField.class);
xstream.alias("EntityFields", EntityFields.class);
EntityFields entityFields = (EntityFields)xstream.fromXML(buff.toString());
xml内容:
<EntityFields>
<EntityField>
<FieldName>Question 1</FieldName>
<FieldDisplayName>some question 1</FieldDisplayName>
<FieldType>character varying</FieldType>
<IsMultivalued>false</IsMultivalued>
</EntityField>
<EntityField>
<FieldName>Question 2</FieldName>
<FieldDisplayName>some question 2</FieldDisplayName>
<FieldType>boolean</FieldType>
<IsMultivalued>false</IsMultivalued>
</EntityField>
<EntityField>
<FieldName>Question 3</FieldName>
<FieldDisplayName>some question 3</FieldDisplayName>
<FieldType>character varying[]</FieldType>
<IsMultivalued>true</IsMultivalued>
</EntityField>
</EntityFields>
请帮忙。
由于
答案 0 :(得分:4)
The following solution worked for me:
XStream xstream = new XStream(new DomDriver());
xstream.alias("EntityFields", EntityFields.class);
xstream.addImplicitCollection(EntityFields.class, "entityFlds");
xstream.alias("EntityField", EntityField.class);
EntityFields entityFields = (EntityFields)xstream.fromXML(buff.toString());
答案 1 :(得分:0)
EntityFields.entityFields
您的代码是正确的。这是XML文件,它与代码不对应:它缺少EntityFields的level'entityFields'字段。
EntityFields仅具有一个字段,但未在XML中列出。添加<entityFields></entityFields>
对可使代码正常工作。
<EntityFields>
<entityFields>
<EntityField>
<FieldName>Question 1</FieldName>
<FieldDisplayName>some question 1</FieldDisplayName>
<FieldType>character varying</FieldType>
<IsMultivalued>false</IsMultivalued>
</EntityField>
<EntityField>
<FieldName>Question 2</FieldName>
<FieldDisplayName>some question 2</FieldDisplayName>
<FieldType>boolean</FieldType>
<IsMultivalued>false</IsMultivalued>
</EntityField>
<EntityField>
<FieldName>Question 3</FieldName>
<FieldDisplayName>some question 3</FieldDisplayName>
<FieldType>character varying[]</FieldType>
<IsMultivalued>true</IsMultivalued>
</EntityField>
</entityFields>
</EntityFields>
要获得此答案,我首先使用XStream本身生成了相应的XML文件。