【发布时间】:2013-04-16 12:51:58
【问题描述】:
我有一个 JAXB 对象。当我序列化它时,结果很有趣!像这样 =>
{"formData":{
"preConditions":{
"acceptTermsAndConditions":"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<acceptTermsAndConditions>true</acceptTermsAndConditions>",
"receivePromoEmail":"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<receivePromoEmail>false</receivePromoEmail>"
}, etc...
而源 XML 只有 true 和 false 作为值:-
<formData>
<preConditions>
<acceptTermsAndConditions>true</acceptTermsAndConditions>
<receivePromoEmail>false</receivePromoEmail>
</preConditions> etc...
我生成 JSON 的代码如下:-
Application application = (Application) JAXBUtil.getXMLAsApplication();
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance());
// make deserializer use JAXB annotations (only)
mapper.getDeserializationConfig().with(introspector);
// make serializer use JAXB annotations (only)
mapper.getSerializationConfig().with(introspector);
try {
mapper.writeValue(new File("application.json"), application);
} catch (IOException e) {
e.printStackTrace();
}
上面的 PreConditions 类是由 JAXB2 (XJC) 生成的。下面是一个sn-p:-
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"acceptTermsAndConditions",
"receivePromoEmail"
})
public static class PreConditions {
@XmlElement(required = true)
protected Object acceptTermsAndConditions;
@XmlElement(required = true)
protected Object receivePromoEmail;
/**
* Gets the value of the acceptTermsAndConditions property.
*
* @return
* possible object is
* {@link Object }
*
*/
public Object getAcceptTermsAndConditions() {
return acceptTermsAndConditions;
}
/**
* Sets the value of the acceptTermsAndConditions property.
*
* @param value
* allowed object is
* {@link Object }
*
*/
public void setAcceptTermsAndConditions(Object value) {
this.acceptTermsAndConditions = value;
}
/**
* Gets the value of the receivePromoEmail property.
*
* @return
* possible object is
* {@link Object }
*
*/
public Object getReceivePromoEmail() {
return receivePromoEmail;
}
/**
* Sets the value of the receivePromoEmail property.
*
* @param value
* allowed object is
* {@link Object }
*
*/
public void setReceivePromoEmail(Object value) {
this.receivePromoEmail = value;
}
}
关于 JSON 为何如此疯狂的任何线索?
【问题讨论】:
-
信息不够:你能添加
Application类型的定义吗?我的猜测是“acceptTermsAndConditions”和“receivePromoEmail”的类型是 DOM 文档之类的——这些不是 POJO 类型,只能序列化为原始字符串。 -
根据要求更新了有关应用程序类型的信息。
-
啊。现在,问题出在
Application.FormData之内(这就是“奇怪”JSON 所在的位置)。你也可以补充一下吗?我仍然认为类型被声明为 DOMElement或其他一些特定于 XML 的类型,除了转储 XML 之外无法以其他方式处理。 -
按要求添加了 Application.FormData。
-
您如何查看您的数据以了解我为什么要求这些...答案就在其中,匹配已嵌入 XML 的字段。