Jorge Bay created TINKERPOP-1696: ------------------------------------ Summary: gremlin-dotnet: GraphSONReader third-party type exposed Key: TINKERPOP-1696 URL: https://issues.apache.org/jira/browse/TINKERPOP-1696 Project: TinkerPop Issue Type: Improvement Components: language-variant Reporter: Jorge Bay Priority: Minor
On gremlin-dotnet, the {{GraphSONReader}} public class and {{IGraphSONDeserializer}} public interface uses {{JToken}} as a parameter, which is a type defined in the third-party library Newtonsoft's Json.NET. {code:java} public class GraphSONReader { public dynamic ToObject(JToken jToken) { // ... implementation } } {code} {code:java} public interface IGraphSONDeserializer { object Objectify(JToken graphsonObject, GraphSONReader reader); } {code} Even though Json.NET is a well-known library, exposing a third-party library type is usually not a good idea as it tightly couples both libraries, ie: {{IGraphSONDeserializer}} implementers will have to use Json.NET. As we are dealing with JSON data, there is a benefit in parsing once and access the parsed data, like its currently implemented (we should avoid using strings and parse multiple times). I propose using [{{dynamic}}|https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic] instead. In C#, an object of type {{dynamic}} is basically a dictionary without compile time checks, which is suitable for scenarios like this one. {code:java} public class GraphSONReader { public dynamic ToObject(dynamic parsedJson) { // ... implementation string type = parsedJson["@type"]; // ... get the deserializer for the given type ... } } {code} {code:java} public interface IGraphSONDeserializer { object Objectify(dynamic graphsonObject, GraphSONReader reader); } {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)