anchor.diff:  ==>tinkergraph[vertices:0 edges:0]
   gremlin> r = LegacyGraphSONReader.build().create()
   ==>org.apache.tinkerpop.gremlin.structure.io.graphson.LegacyGraphSONReader@64337702
  -gremlin> r.readGraph(new FileInputStream('/tmp/tp2.json'),graph)
  +gremlin> r.readGraph(new FileInputStream('/tmp/tp2.json'), graph)
   ==>null
   gremlin> g = graph.traversal(standard())
   ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
  
positive.code: ----
  final Graph graph = TinkerFactory.createModern();
  try (final OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
      graph.io().gryoWriter().create().writeGraph(os);
  }
  
  final Graph newGraph = TinkerGraph.open();
  try (final InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
      newGraph.io().gryoReader().vertexIdKey("name").create().readGraph(stream);
  }
  ----
  
  
negative.code: 
  With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided:
  
  [gremlin-groovy]
  ----
  graph = TinkerFactory.createModern()
  g = graph.traversal()
  f = new FileOutputStream("vertex-1.json")
  mapper = graph.io().graphSONMapper().embedTypes(true).create()
  graph.io().graphSONWriter().mapper(mapper).create().writeVertex(f, g.V(1).next(), BOTH)
  f.close()
  ----
  
  In the above code, the `embedTypes` option is set to `true` and the output below shows the difference in the output:
  