【发布时间】:2017-01-11 20:49:32
【问题描述】:
我有不想重写的旧代码,我正在使用 gson 和 io.gsonfire 将特殊 json 映射到我的 java 类。我只想将 Datasnapshot 转换为 json 字符串,这样我就可以使用我的其他实现。我将无法使用 Datasnapshot.getValue(SomeClass.class) 因为我的转换器很特殊。
public class BlockTypeSelector {
public Gson createGson(){
GsonFireBuilder builder = new GsonFireBuilder()
.registerTypeSelector(AbstractPhrase.class, new TypeSelector<AbstractPhrase>() {
@Override
public Class<? extends AbstractPhrase> getClassForElement( JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("dotted");
if( element != null ){
return DottedFillPhrase.class;
}
return Phrase.class;
}
})
.registerTypeSelector(AbstractParagraph.class, new TypeSelector<AbstractParagraph>() {
@Override
public Class<? extends AbstractParagraph> getClassForElement( JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("cells");
if( element != null ){
return TableParagraph.class;
}
element = readElement.getAsJsonObject().get("padding");
if( element != null ){
return TableCell.class;
}
element = readElement.getAsJsonObject().get("fill");
if( element != null ){
return FillParagraph.class;
}
return Paragraph.class;
}
})
.registerTypeSelector(BaseElement.class, new TypeSelector<BaseElement>() {
@Override
public Class<? extends BaseElement> getClassForElement(JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("type");
if( element == null ){
throw new JsonSyntaxException( "You must have a type in block" );
}
String kind = element.getAsString();
if(kind.equals("LINE")){
return Line.class;
}else if(kind.equals("BLOCK")) {
return Block.class;
}else if(kind.equals("IMAGE")) {
return Image.class;
}else if(kind.equals("QR")) {
return QRCode.class;
}else if(kind.equals("BARCODE")) {
return Barcode.class;
} else {
return null; //returning null will trigger Gson's default behavior
}
}
});
return builder.createGson();
}
}
所以任何关于如何制作这样的东西的指针
{ key = 787878, value = {document={pages={0={blocks={0={position={3=60.1, 2=50, 1=28.95, 0=25.6}, useAscender=true, type=BLOCK, border={thickness=0.1}}}}}, name=22323}} }
转json字符串?我担心的是 3:60 之类的。我怎么知道它是一个数组而不是 "3" : "60" json?
【问题讨论】:
标签: java firebase firebase-realtime-database