You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/22 18:30:48 UTC

[11/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0-typed.json b/data/tinkerpop-classic-v2d0-typed.json
new file mode 100644
index 0000000..56956ea
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0.json b/data/tinkerpop-classic-v2d0.json
new file mode 100644
index 0000000..5ccfe05
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"vertex","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":2,"value":29}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":3,"value":"vadas"}],"age":[{"id":4,"value":27}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":5,"value":"lop"}],"lang":[{"id":6,"value":"java"}]}}
+{"id":4,"label":"vertex","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":7,"value":"josh"}],"age":[{"id":8,"value":32}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":9,"value":"ripple"}],"lang":[{"id":10,"value":"java"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":11,"value":"peter"}],"age":[{"id":12,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0-typed.json b/data/tinkerpop-crew-v2d0-typed.json
new file mode 100644
index 0000000..e688520
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
 4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
 :int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
 }},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
 {"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
 type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0.json b/data/tinkerpop-crew-v2d0.json
new file mode 100644
index 0000000..2165e4d
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"uses":[{"id":16,"inV":11,"properties":{"skill":5}},{"id":15,"inV":10,"properties":{"skill":4}}],"develops":[{"id":13,"inV":10,"properties":{"since":2009}},{"id":14,"inV":11,"properties":{"since":2010}}]},"properties":{"name":[{"id":0,"value":"marko"}],"location":[{"id":6,"value":"san diego","properties":{"startTime":1997,"endTime":2001}},{"id":7,"value":"santa cruz","properties":{"startTime":2001,"endTime":2004}},{"id":8,"value":"brussels","properties":{"startTime":2004,"endTime":2005}},{"id":9,"value":"santa fe","properties":{"startTime":2005}}]}}
+{"id":7,"label":"person","outE":{"uses":[{"id":19,"inV":10,"properties":{"skill":5}},{"id":20,"inV":11,"properties":{"skill":4}}],"develops":[{"id":17,"inV":10,"properties":{"since":2010}},{"id":18,"inV":11,"properties":{"since":2011}}]},"properties":{"name":[{"id":1,"value":"stephen"}],"location":[{"id":10,"value":"centreville","properties":{"startTime":1990,"endTime":2000}},{"id":11,"value":"dulles","properties":{"startTime":2000,"endTime":2006}},{"id":12,"value":"purcellville","properties":{"startTime":2006}}]}}
+{"id":8,"label":"person","outE":{"uses":[{"id":22,"inV":10,"properties":{"skill":3}},{"id":23,"inV":11,"properties":{"skill":3}}],"develops":[{"id":21,"inV":10,"properties":{"since":2012}}]},"properties":{"name":[{"id":2,"value":"matthias"}],"location":[{"id":13,"value":"bremen","properties":{"startTime":2004,"endTime":2007}},{"id":14,"value":"baltimore","properties":{"startTime":2007,"endTime":2011}},{"id":15,"value":"oakland","properties":{"startTime":2011,"endTime":2014}},{"id":16,"value":"seattle","properties":{"startTime":2014}}]}}
+{"id":9,"label":"person","outE":{"uses":[{"id":24,"inV":10,"properties":{"skill":5}},{"id":25,"inV":11,"properties":{"skill":3}}]},"properties":{"name":[{"id":3,"value":"daniel"}],"location":[{"id":17,"value":"spremberg","properties":{"startTime":1982,"endTime":2005}},{"id":18,"value":"kaiserslautern","properties":{"startTime":2005,"endTime":2009}},{"id":19,"value":"aachen","properties":{"startTime":2009}}]}}
+{"id":10,"label":"software","inE":{"uses":[{"id":19,"outV":7,"properties":{"skill":5}},{"id":22,"outV":8,"properties":{"skill":3}},{"id":24,"outV":9,"properties":{"skill":5}},{"id":15,"outV":1,"properties":{"skill":4}}],"develops":[{"id":17,"outV":7,"properties":{"since":2010}},{"id":21,"outV":8,"properties":{"since":2012}},{"id":13,"outV":1,"properties":{"since":2009}}]},"outE":{"traverses":[{"id":26,"inV":11}]},"properties":{"name":[{"id":4,"value":"gremlin"}]}}
+{"id":11,"label":"software","inE":{"traverses":[{"id":26,"outV":10}],"uses":[{"id":16,"outV":1,"properties":{"skill":5}},{"id":20,"outV":7,"properties":{"skill":4}},{"id":23,"outV":8,"properties":{"skill":3}},{"id":25,"outV":9,"properties":{"skill":3}}],"develops":[{"id":18,"outV":7,"properties":{"since":2011}},{"id":14,"outV":1,"properties":{"since":2010}}]},"properties":{"name":[{"id":5,"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0-typed.json b/data/tinkerpop-modern-v2d0-typed.json
new file mode 100644
index 0000000..9a297c3
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0.json b/data/tinkerpop-modern-v2d0.json
new file mode 100644
index 0000000..18c265d
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
+{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 8b4916a..151de3a 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -499,7 +499,7 @@ graph.io(graphson()).writer().create().writeVertex(f, g.V(1).next(), BOTH)
 f.close()
 ----
 
-The following GraphSON example shows the output of `GraphSonWriter.writeVertex()` with associated edges:
+The following GraphSON example shows the output of `GraphSONWriter.writeVertex()` with associated edges:
 
 [source,json]
 ----
@@ -553,7 +553,18 @@ The following GraphSON example shows the output of `GraphSonWriter.writeVertex()
 The vertex properly serializes to valid JSON but note that a consuming application will not automatically know how to
 interpret the numeric values.  In coercing those Java values to JSON, such information is lost.
 
-With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided:
+[[graphson-types-embedding]]
+Types embedding
+^^^^^^^^^^^^^^^
+
+With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided.
+
+[[graphson-1.0-types]]
+Types with GraphSON 1.0.
+++++++++++++++++++++++++
+
+GraphSON 1.0 is the version enabled by default when creating a GraphSON Mapper. Here is how to enable types with GraphSON
+1.0:
 
 [gremlin-groovy]
 ----
@@ -652,6 +663,128 @@ from JSON typing.  While the output is more verbose, it comes with the security
 non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the
 values should be coerced back into the correct types in the target language.
 
+[[graphson-2.0-types]]
+GraphSON 2.0.
++++++++++++++
+
+GraphSON 2.0 has been introduced to improve the format of the typed values from GraphSON 1.0. It provides non-Java
+centric types information in a consistent format.
+
+With GraphSON 2.0, types are enabled by default.
+
+The type format is :
+
+* Non typed value : `value`
+* Typed value     : `{"@type":"typeID", "@value":value}`
+
+TypeIDs are composed of 2 parts, a namespace, and a type name, in the format `"namespace:typename"`.
+A namespace gives the possibility for TinkerPop implementors to categorize custom types they may implement
+and avoid collision with existing TinkerPop types. By default, TinkerPop types will have the
+namespace `g`.
+
+GraphSON 2.0 will provide type information for any value that is not String, Boolean, Map or Collection.
+This includes types for Graph objects as well. The current Graph object types provided by
+TinkerPop, and their respective typeIDs are :
+
+* Vertex -> "gremlin:vertex"
+* Edge -> "gremlin:edge"
+* VertexPropery -> "gremlin:vertexproperty"
+* Property -> "gremlin:property"
+* Path -> "gremlin:path"
+* Tree -> "gremlin:tree"
+* Graph -> "gremlin:graph"
+* Metrics -> "gremlin:metrics"
+* TraversalMetrics -> `gremlin:traversalmetrics"
+
+Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
+
+[gremlin-groovy]
+----
+graph = TinkerFactory.createModern()
+g = graph.traversal()
+f = new FileOutputStream("vertex-graphson20.json")
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
+v = g.V(1).next()
+v.property("uuid", UUID.randomUUID())
+graph.io(graphson()).writer().mapper(mapper).create().writeObject(f, v)
+f.close()
+----
+
+Creating a GraphSON 2.0 mapper is done by calling `.version(GraphSONVersion.V2_0)` on the mapper builder.
+Here's a sample output:
+
+[source,json]
+----
+{
+    "@type":"gremlin:vertex",
+    "@value":{
+        "id":{
+            "@type":"gremlin:int32",
+            "@value":1
+        },
+        "label":"person",
+        "properties":{
+            "name":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":0
+                        },
+                        "value":"marko",
+                        "label":"name"
+                    }
+                }
+            ],
+            "myUUIDprop":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":12
+                        },
+                        "value":{
+                            "@type":"gremlin:uuid",
+                            "@value":"02c1041b-c7ef-46ce-812e-3d7963ad50b3"
+                        },
+                        "label":"myUUIDprop"
+                    }
+                }
+            ],
+            "age":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":1
+                        },
+                        "value":{
+                            "@type":"gremlin:int32",
+                            "@value":29
+                        },
+                        "label":"age"
+                    }
+                }
+            ]
+        }
+    }
+}
+----
+
+Here's how to disable types when creating a GraphSON 2.0 `Mapper`:
+
+[gremlin-groovy]
+----
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
+----
+
+By disabling types, the JSON payload produced will be the same than GraphSON 2.0, without the
+extra information that is written for types. Please note, disabling types can be unsafe with
+regards to the written data.
+
 [[gryo-reader-writer]]
 Gryo Reader/Writer
 ~~~~~~~~~~~~~~~~~~
@@ -772,4 +905,4 @@ IMPORTANT: TinkerPop uses `tinkerpop.` and `gremlin.` as the prefixes for provid
 reduce implementations, and plugins.
 
 The only truly protected namespace is the _hidden namespace_ provided to graph systems. From there, it's up to
-engineers to respect the namespacing conventions presented.
+engineers to respect the namespacing conventions presented.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index bdcf69e..bf29feb 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -93,6 +93,13 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+GraphSON 2.0
+^^^^^^^^^^^^
+
+GraphSON 2.0 has been introduced to improve and normalize the format of types embedding in GraphSON. Please see
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0] and link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274].
+
 Gephi Plugin
 ^^^^^^^^^^^^
 
@@ -268,6 +275,19 @@ VertexTest Signatures
 The method signatures of `get_g_VXlistXv1_v2_v3XX_name` and `get_g_VXlistX1_2_3XX_name` of `VertexTest` were changed
 to take arguments for the `Traversal` to be constructed by extending classes.
 
+Graph Drivers Providers
+^^^^^^^^^^^^^^^^^^^^^^
+
+GraphSON 2.0
+++++++++++++
+
+Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
+has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non Java
+languages can then implement their own mapping of the GraphSON's language agnostic type IDs like `UUID`, `LocalDate` to
+the appropriate representation for the driver's language. A more detailed description of GraphSON 2.0 can be found
+there : link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation
+- GraphSON 2.0]
+
 TinkerPop 3.2.0
 ---------------
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
index 1714a9e..058386b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
@@ -54,6 +54,14 @@ public final class DefaultTraversalMetrics implements TraversalMetrics, Serializ
     public DefaultTraversalMetrics() {
     }
 
+    // This is only a convenient constructor needed for GraphSON deserialization.
+    // TODO: see if that's ok to add that.
+    public DefaultTraversalMetrics(long totalStepDurationNs, List<MutableMetrics> metricsMap) {
+        this.totalStepDuration = totalStepDurationNs;
+        this.computedMetrics = new LinkedHashMap<>(metrics.size());
+        metricsMap.forEach(m -> computedMetrics.put(m.getId(), m.getImmutableClone()));
+    }
+
     @Override
     public long getDuration(final TimeUnit unit) {
         return unit.convert(totalStepDuration, MutableMetrics.SOURCE_UNIT);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
index a952c65..3b0c886 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
@@ -42,6 +42,18 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
         this.name = name;
     }
 
+    // create a MutableMetrics from an Immutable one.
+    // needed that for tests, don't know if it is worth keeping it public.
+    // TODO: see if it's ok to add this
+    public MutableMetrics(Metrics other) {
+        this.id = other.getId();
+        this.name = other.getName();
+        this.annotations.putAll(other.getAnnotations());
+        this.durationNs = other.getDuration(TimeUnit.NANOSECONDS);
+        other.getCounts().forEach((key, count) -> this.counts.put(key, new AtomicLong(count)));
+        other.getNested().forEach(nested -> this.addNested(new MutableMetrics(nested)));
+    }
+
     public void addNested(MutableMetrics metrics) {
         this.nested.put(metrics.getId(), metrics);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 73e9552..2a000a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -29,10 +29,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeResolverBuilder
 import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
 import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
 import org.javatuples.Pair;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * An extension to the standard Jackson {@code ObjectMapper} which automatically registers the standard
@@ -60,14 +74,15 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
     private final boolean normalize;
     private final boolean embedTypes;
     private final GraphSONVersion version;
+    private final TypeInfo typeInfo;
 
-    private GraphSONMapper(final List<SimpleModule> customModules, final boolean loadCustomSerializers,
-                           final boolean normalize, final boolean embedTypes, final GraphSONVersion version) {
-        this.customModules = customModules;
-        this.loadCustomSerializers = loadCustomSerializers;
-        this.normalize = normalize;
-        this.embedTypes = embedTypes;
-        this.version = version;
+    private GraphSONMapper(final Builder builder) {
+        this.customModules = builder.customModules;
+        this.loadCustomSerializers = builder.loadCustomModules;
+        this.normalize = builder.normalize;
+        this.embedTypes = builder.embedTypes;
+        this.version = builder.version;
+        this.typeInfo = builder.typeInfo;
     }
 
     @Override
@@ -75,32 +90,75 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         final ObjectMapper om = new ObjectMapper();
         om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
 
-        if (embedTypes) {
-            final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
-                    .init(JsonTypeInfo.Id.CLASS, null)
-                    .inclusion(JsonTypeInfo.As.PROPERTY)
-                    .typeProperty(GraphSONTokens.CLASS);
-            om.setDefaultTyping(typer);
-        }
-
-        if (normalize)
-            om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
-
-        // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
-        final DefaultSerializerProvider provider = new GraphSONSerializerProvider();
-        provider.setDefaultKeySerializer(new GraphSONSerializers.GraphSONKeySerializer());
-        om.setSerializerProvider(provider);
-
-        om.registerModule(version.getBuilder().create(normalize));
+        GraphSONModule graphSONModule = version.getBuilder().create(normalize);
+        om.registerModule(graphSONModule);
         customModules.forEach(om::registerModule);
 
+
         // plugin external serialization modules
         if (loadCustomSerializers)
             om.findAndRegisterModules();
 
+
+        if (version == GraphSONVersion.V1_0) {
+            if (embedTypes) {
+                final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
+                        .init(JsonTypeInfo.Id.CLASS, null)
+                        .inclusion(JsonTypeInfo.As.PROPERTY)
+                        .typeProperty(GraphSONTokens.CLASS);
+                om.setDefaultTyping(typer);
+            }
+        } else if (version == GraphSONVersion.V2_0) {
+            if (typeInfo != TypeInfo.NO_TYPES) {
+                GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
+                final TypeResolverBuilder typer = new GraphSONTypeResolverBuilder()
+                        .typesEmbedding(getTypeInfo())
+                        .valuePropertyName(GraphSONTokens.VALUEPROP)
+                        .init(JsonTypeInfo.Id.CUSTOM, graphSONTypeIdResolver)
+                        .typeProperty(GraphSONTokens.VALUETYPE)
+                        ;
+
+                // Registers native Java types that are supported by Jackson
+                registerJavaBaseTypes(graphSONTypeIdResolver);
+
+                // Registers the GraphSON Module's types
+                graphSONModule.getTypeDefinitions()
+                        .forEach(
+                                (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", graphSONModule.getTypeNamespace(), typeId), targetClass)
+                        );
+
+
+                // Register types to typeResolver for the Custom modules
+                customModules.forEach(e -> {
+                    if (e instanceof TinkerPopJacksonModule) {
+                        TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
+                        Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
+                        if (moduleTypeDefinitions != null) {
+                            if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty()) {
+                                throw new IllegalStateException("Cannot specify a module for GraphSON 2.0 with type definitions but without a type Domain. " +
+                                        "If no specific type domain is required, use Gremlin's default domain, \"gremlin\" but there may be collisions.");
+                            }
+                            moduleTypeDefinitions.forEach(
+                                    (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass)
+                            );
+                        }
+                    }
+                });
+                om.setDefaultTyping(typer);
+            }
+        } else {
+            throw new IllegalStateException("Unknown GraphSONVersion : " + version);
+        }
+
+        // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
+        final DefaultSerializerProvider provider = new GraphSONSerializerProvider(version);
+        om.setSerializerProvider(provider);
+
+        if (normalize)
+            om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
+
         // keep streams open to accept multiple values (e.g. multiple vertices)
         om.getFactory().disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
-
         return om;
     }
 
@@ -112,6 +170,31 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         return new Builder();
     }
 
+    public TypeInfo getTypeInfo() {
+        return this.typeInfo;
+    }
+
+
+    private void registerJavaBaseTypes(GraphSONTypeIdResolver graphSONTypeIdResolver) {
+        Arrays.asList(
+                BigInteger.class,
+                BigDecimal.class,
+                Byte.class,
+                Character.class,
+                UUID.class,
+                InetAddress.class,
+                InetSocketAddress.class,
+                Class.class,
+                Calendar.class,
+                Date.class,
+                TimeZone.class,
+                Timestamp.class,
+                AtomicBoolean.class,
+                AtomicReference.class,
+                TokenBuffer.class
+        ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName().toLowerCase()), e));
+    }
+
     public static class Builder implements Mapper.Builder<Builder> {
         private List<SimpleModule> customModules = new ArrayList<>();
         private boolean loadCustomModules = false;
@@ -119,6 +202,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         private boolean embedTypes = false;
         private List<IoRegistry> registries = new ArrayList<>();
         private GraphSONVersion version = GraphSONVersion.V1_0;
+        // GraphSON 2.0 should have types activated by default, otherwise use there's no point in using it instead of 1.0.
+        private TypeInfo typeInfo = TypeInfo.PARTIAL_TYPES;
 
         private Builder() {
         }
@@ -133,7 +218,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         }
 
         /**
-         * Set the version of GraphSON to use.
+         * Set the version of GraphSON to use. The default is {@link GraphSONVersion#V1_0}.
          */
         public Builder version(final GraphSONVersion version) {
             this.version = version;
@@ -174,10 +259,35 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         }
 
         /**
-         * Embeds Java types into generated JSON to clarify their origins.
+         * Embeds Java types into generated JSON to clarify their origins. Setting this value will override the value
+         * of {@link #typeInfo(TypeInfo)} where true will set it to {@link TypeInfo#PARTIAL_TYPES} and false will set
+         * it to {@link TypeInfo#NO_TYPES}.
+         *
+         * @deprecated As of release 3.2.1, replaced by {@link #typeInfo(TypeInfo)}.
          */
+        @Deprecated
         public Builder embedTypes(final boolean embedTypes) {
             this.embedTypes = embedTypes;
+            this.typeInfo = embedTypes ? TypeInfo.PARTIAL_TYPES : TypeInfo.NO_TYPES;
+            return this;
+        }
+
+        /**
+         * Specify if the values are going to be typed or not, and at which level. Setting this value will override
+         * the value of {@link #embedTypes(boolean)} where {@link TypeInfo#PARTIAL_TYPES} will set it to true and
+         * {@link TypeInfo#NO_TYPES} will set it to false.
+         *
+         * The level can be NO_TYPES or PARTIAL_TYPES, and could be extended in the future.
+         */
+        public Builder typeInfo(final TypeInfo typeInfo) {
+            this.typeInfo = typeInfo;
+            if (typeInfo.equals(TypeInfo.PARTIAL_TYPES))
+                this.embedTypes = true;
+            else if (typeInfo.equals(TypeInfo.NO_TYPES))
+                this.embedTypes = false;
+            else
+                throw new IllegalArgumentException("This value can only be set to PARTIAL_TYPES and NO_TYPES");
+
             return this;
         }
 
@@ -187,7 +297,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
                 simpleModules.stream().map(Pair::getValue1).forEach(this.customModules::add);
             });
 
-            return new GraphSONMapper(customModules, loadCustomModules, normalize, embedTypes, version);
+            return new GraphSONMapper(this);
         }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 7cc6c91..a0303cf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -19,15 +19,19 @@
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0;
 
+import java.nio.ByteBuffer;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -41,8 +45,8 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 
 /**
  * The set of serializers that handle the core graph interfaces.  These serializers support normalization which
@@ -54,13 +58,147 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-abstract class GraphSONModule extends SimpleModule {
+abstract class GraphSONModule extends TinkerPopJacksonModule {
 
     GraphSONModule(final String name) {
         super(name);
     }
 
     /**
+     * Version 2.0 of GraphSON.
+     */
+    static final class GraphSONModuleV2d0 extends GraphSONModule {
+        /**
+         * Constructs a new object.
+         */
+        protected GraphSONModuleV2d0(final boolean normalize) {
+            super("graphson-2.0");
+
+            /////////////////////// SERIALIZERS ////////////////////////////
+
+            // graph
+            addSerializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonSerializer(normalize));
+            addSerializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonSerializer(normalize));
+            addSerializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonSerializer(normalize, true));
+            addSerializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonSerializer());
+            addSerializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonSerializer());
+            addSerializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonSerializer());
+            addSerializer(TraversalExplanation.class, new GraphSONSerializersV2d0.TraversalExplanationJacksonSerializer());
+            addSerializer(Path.class, new GraphSONSerializersV2d0.PathJacksonSerializer());
+            addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV2d0(normalize));
+            addSerializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonSerializer());
+
+            // java.util
+            addSerializer(Map.Entry.class, new JavaUtilSerializersV2d0.MapEntryJacksonSerializer());
+
+            // need to explicitly add serializers for those types because Jackson doesn't do it at all.
+            addSerializer(Integer.class, new GraphSONSerializersV2d0.IntegerGraphSONSerializer());
+            addSerializer(Double.class, new GraphSONSerializersV2d0.DoubleGraphSONSerializer());
+
+            // java.time
+            addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
+            addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
+            addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
+            addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
+            addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
+            addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
+            addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
+            addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
+            addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
+            addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
+            addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
+            addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
+            addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
+
+            /////////////////////// DESERIALIZERS ////////////////////////////
+
+            // Tinkerpop Graph
+            addDeserializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonDeserializer());
+            addDeserializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonDeserializer());
+            addDeserializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonDeserializer());
+            addDeserializer(Path.class, new GraphSONSerializersV2d0.PathJacksonDeserializer());
+            addDeserializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonDeserializer());
+            addDeserializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonDeserializer());
+            addDeserializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonDeserializer());
+            addDeserializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonDeserializer());
+
+            // java.time
+            addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
+            addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
+            addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
+            addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
+            addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
+            addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
+            addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
+            addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
+            addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
+            addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
+            addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
+            addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
+            addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
+        }
+
+        public static Builder build() {
+            return new Builder();
+        }
+
+        @Override
+        public Map<Class, String> getTypeDefinitions() {
+            return new LinkedHashMap<Class, String>(){{
+                // Those don't have deserializers because handled by Jackson,
+                // but we still want to rename them in GraphSON
+                put(ByteBuffer.class, "bytebuffer");
+                put(Short.class, "int16");
+                put(Integer.class, "int32");
+                put(Long.class, "int64");
+                put(Double.class, "double");
+                put(Float.class, "float");
+
+                // Time serializers/deserializers
+                put(Duration.class, "duration");
+                put(Instant.class, "instant");
+                put(LocalDate.class, "localdate");
+                put(LocalDateTime.class, "localdatetime");
+                put(LocalTime.class, "localtime");
+                put(MonthDay.class, "monthday");
+                put(OffsetDateTime.class, "offsetdatetime");
+                put(OffsetTime.class, "offsettime");
+                put(Period.class, "period");
+                put(Year.class, "year");
+                put(YearMonth.class, "yearmonth");
+                put(ZonedDateTime.class, "zoneddatetime");
+                put(ZoneOffset.class, "zoneoffset");
+
+                // Tinkerpop Graph objects
+                put(Vertex.class, "vertex");
+                put(Edge.class, "edge");
+                put(Property.class, "property");
+                put(Path.class, "path");
+                put(VertexProperty.class, "vertexproperty");
+                put(Metrics.class, "metrics");
+                put(TraversalMetrics.class, "traversalmetrics");
+                put(Tree.class, "tree");
+            }};
+        }
+
+        @Override
+        public String getTypeNamespace() {
+            return GraphSONTokens.GREMLIN_TYPE_NAMESPACE;
+        }
+
+        static final class Builder implements GraphSONModuleBuilder {
+
+            private Builder() {}
+
+            @Override
+            public GraphSONModule create(final boolean normalize) {
+                return new GraphSONModuleV2d0(normalize);
+            }
+
+        }
+    }
+
+    /**
      * Version 1.0 of GraphSON.
      */
     static final class GraphSONModuleV1d0 extends GraphSONModule {
@@ -71,53 +209,65 @@ abstract class GraphSONModule extends SimpleModule {
         protected GraphSONModuleV1d0(final boolean normalize) {
             super("graphson-1.0");
             // graph
-            addSerializer(Edge.class, new GraphSONSerializers.EdgeJacksonSerializer(normalize));
-            addSerializer(Vertex.class, new GraphSONSerializers.VertexJacksonSerializer(normalize));
-            addSerializer(VertexProperty.class, new GraphSONSerializers.VertexPropertyJacksonSerializer(normalize));
-            addSerializer(Property.class, new GraphSONSerializers.PropertyJacksonSerializer());
-            addSerializer(TraversalMetrics.class, new GraphSONSerializers.TraversalMetricsJacksonSerializer());
-            addSerializer(TraversalExplanation.class, new GraphSONSerializers.TraversalExplanationJacksonSerializer());
-            addSerializer(Path.class, new GraphSONSerializers.PathJacksonSerializer());
-            addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
-            addSerializer(Tree.class, new GraphSONSerializers.TreeJacksonSerializer());
+            addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+            addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+            addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+            addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+            addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+            addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+            addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
+            addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV1d0(normalize));
+            addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
            
             // java.util
-            addSerializer(Map.Entry.class, new JavaUtilSerializers.MapEntryJacksonSerializer());
+            addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
 
             // java.time
-            addSerializer(Duration.class, new JavaTimeSerializers.DurationJacksonSerializer());
-            addSerializer(Instant.class, new JavaTimeSerializers.InstantJacksonSerializer());
-            addSerializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonSerializer());
-            addSerializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonSerializer());
-            addSerializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonSerializer());
-            addSerializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonSerializer());
-            addSerializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonSerializer());
-            addSerializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonSerializer());
-            addSerializer(Period.class, new JavaTimeSerializers.PeriodJacksonSerializer());
-            addSerializer(Year.class, new JavaTimeSerializers.YearJacksonSerializer());
-            addSerializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonSerializer());
-            addSerializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonSerializer());
-            addSerializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonSerializer());
-
-            addDeserializer(Duration.class, new JavaTimeSerializers.DurationJacksonDeserializer());
-            addDeserializer(Instant.class, new JavaTimeSerializers.InstantJacksonDeserializer());
-            addDeserializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonDeserializer());
-            addDeserializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonDeserializer());
-            addDeserializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonDeserializer());
-            addDeserializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonDeserializer());
-            addDeserializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonDeserializer());
-            addDeserializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonDeserializer());
-            addDeserializer(Period.class, new JavaTimeSerializers.PeriodJacksonDeserializer());
-            addDeserializer(Year.class, new JavaTimeSerializers.YearJacksonDeserializer());
-            addDeserializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonDeserializer());
-            addDeserializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonDeserializer());
-            addDeserializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonDeserializer());
+            addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+            addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+            addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+            addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+            addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+            addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+            addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+            addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+            addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+            addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+            addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+            addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+            addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+
+            addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+            addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+            addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+            addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+            addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+            addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+            addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+            addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+            addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+            addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+            addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+            addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+            addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
         }
 
         public static Builder build() {
             return new Builder();
         }
 
+        @Override
+        public Map<Class, String> getTypeDefinitions() {
+            // null is fine and handled by the GraphSONMapper
+            return null;
+        }
+
+        @Override
+        public String getTypeNamespace() {
+            // null is fine and handled by the GraphSONMapper
+            return null;
+        }
+
         static final class Builder implements GraphSONModuleBuilder {
 
             private Builder() {}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
index d95fdff..0b27c61 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
@@ -35,7 +35,7 @@ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONDeserializer;
 import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
@@ -169,14 +169,14 @@ public final class GraphSONReader implements GraphReader {
                              final Function<Attachable<Edge>, Edge> edgeAttachMethod,
                              final Direction attachEdgesOfThisDirection) throws IOException {
         final Map<String, Object> vertexData = mapper.readValue(inputStream, mapTypeReference);
-        final StarGraph starGraph = StarGraphGraphSONSerializer.readStarGraphVertex(vertexData);
+        final StarGraph starGraph = StarGraphGraphSONDeserializer.readStarGraphVertex(vertexData);
         if (vertexAttachMethod != null) vertexAttachMethod.apply(starGraph.getStarVertex());
 
         if (vertexData.containsKey(GraphSONTokens.OUT_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.OUT))
-            StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
+            StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
 
         if (vertexData.containsKey(GraphSONTokens.IN_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.IN))
-            StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
+            StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
 
         return starGraph.getStarVertex();
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
index ed20fd9..c373692 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
@@ -26,17 +26,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.ser.SerializerFactory;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ToStringSerializer;
 
 /**
- * Implementation of the {@code DefaultSerializerProvider} for Jackson that users the {@code ToStringSerializer} for
+ * Implementation of the {@code DefaultSerializerProvider} for Jackson that uses the {@code ToStringSerializer} for
  * unknown types.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 final class GraphSONSerializerProvider extends DefaultSerializerProvider {
     private static final long serialVersionUID = 1L;
-    private static final ToStringSerializer toStringSerializer = new ToStringSerializer();
+    private static JsonSerializer<Object> unknownTypeSerializer = new ToStringSerializer();
 
-    public GraphSONSerializerProvider() {
+    public GraphSONSerializerProvider(GraphSONVersion version) {
         super();
+        if (version == GraphSONVersion.V1_0) {
+            setDefaultKeySerializer(new GraphSONSerializersV1d0.GraphSONKeySerializer());
+            unknownTypeSerializer = new ToStringSerializer();
+        } else {
+            setDefaultKeySerializer(new GraphSONSerializersV2d0.GraphSONKeySerializer());
+            unknownTypeSerializer = new ToStringGraphSONSerializer();
+        }
     }
 
     protected GraphSONSerializerProvider(final SerializerProvider src,
@@ -46,7 +53,7 @@ final class GraphSONSerializerProvider extends DefaultSerializerProvider {
 
     @Override
     public JsonSerializer<Object> getUnknownTypeSerializer(final Class<?> aClass) {
-        return toStringSerializer;
+        return unknownTypeSerializer;
     }
 
     @Override