2017-01-11 60 views
0

我有舊的遺留代碼,我不想重寫,我使用gson和io.gsonfire做特殊的json映射到我的java類。我只想將Datasnapshot轉換爲json字符串,以便我可以使用其他實現。我將無法使用Datasnapshot.getValue(SomeClass.class),因爲我的變壓器是特殊的。自己的Firebase解串器

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?

回答

0

看來你已經在使用Gson來解析JSON。你也可以使用Gson到serialize JSON以及使用它自己的API挖掘DataSnapshot並使用它來填充一些JSON輸出。

如果你這樣做,我懷疑這將是大約相同數量的努力爲編寫代碼來導航DataSnapshot和轉換其直接你的數據模型,它會跑快了很多比它轉換成JSON,然後到你的模型。

+0

DataSnapshot讓我無法序列化我的對象。 – Edgesoft

+0

你必須使用它的API(我鏈接到)來獲取它裏面的值。 getChildren(),child()和value()都是你需要的。 –