[jira] [Updated] (TINKERPOP-1696) gremlin-dotnet: GraphSONReader third-party type exposed
[ https://issues.apache.org/jira/browse/TINKERPOP-1696?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] stephen mallette updated TINKERPOP-1696: Labels: breaking (was: ) > 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: dotnet >Affects Versions: 3.3.0 >Reporter: Jorge Bay >Priority: Minor > Labels: breaking > > 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 (v7.6.3#76005)
[jira] [Updated] (TINKERPOP-1696) gremlin-dotnet: GraphSONReader third-party type exposed
[ https://issues.apache.org/jira/browse/TINKERPOP-1696?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] stephen mallette updated TINKERPOP-1696: Component/s: (was: language-variant) dotnet > 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: dotnet >Affects Versions: 3.3.0 >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)
[jira] [Updated] (TINKERPOP-1696) gremlin-dotnet: GraphSONReader third-party type exposed
[ https://issues.apache.org/jira/browse/TINKERPOP-1696?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] stephen mallette updated TINKERPOP-1696: Affects Version/s: 3.3.0 > 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 >Affects Versions: 3.3.0 >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)