Ich versuche, ein RDF/JSON-Diagramm mit Hilfe von dotnetrdf zu analysieren und es schlägt fehl, wenn ich ein Datum als Literal habe, unten ist ein Beispielcode mit dem problematischen Tripel, das das Problem verursacht .Triple mit ISO8601 Datum bricht RDFJSON Parser in Dotnetrdf
using VDS.RDF;
using VDS.RDF.Parsing;
...
var jsonstr = @"
{
""http://example.com"": {
""http://purl.org/dc/terms/issued"": [{
""datatype"": ""http://www.w3.org/2001/XMLSchema#date"",
""type"": ""literal"",
""value"": ""2017-10-24T15:01:53+02:00""
}]
}
}";
IGraph g = new Graph();
g.LoadFromString(str1, new RdfJsonParser());
verursacht die folgende execption:
Exception has occurred: CLR/VDS.RDF.Parsing.RdfParseException
Exception thrown: 'VDS.RDF.Parsing.RdfParseException' in dotNetRDF.dll: '[Line 4 Column 40 to Line 7 Column 44] Unexpected Token 'Date' encountered, expected a Property Value describing one of the properties of an Object Node'
at VDS.RDF.Parsing.RdfJsonParser.Error(JsonParserContext context, String message, PositionInfo startPos)
at VDS.RDF.Parsing.RdfJsonParser.ParseObject(JsonParserContext context, INode subj, INode pred)
at VDS.RDF.Parsing.RdfJsonParser.ParseObjectList(JsonParserContext context, INode subj, INode pred)
at VDS.RDF.Parsing.RdfJsonParser.ParsePredicateObjectList(JsonParserContext context, INode subj)
at VDS.RDF.Parsing.RdfJsonParser.ParseTriples(JsonParserContext context)
at VDS.RDF.Parsing.RdfJsonParser.ParseGraphObject(JsonParserContext context)
at VDS.RDF.Parsing.RdfJsonParser.Parse(IRdfHandler handler, TextReader input)
at VDS.RDF.Parsing.RdfJsonParser.Load(IRdfHandler handler, TextReader input)
at VDS.RDF.Parsing.StringParser.Parse(IGraph g, String data, IRdfReader reader)
Das Problem ist das gleiche, wenn ich den expliziten Datentyp entfernen. Aber das Problem dissapers, wenn ich das Literal ändere, so ist es nicht mehr ein kombinierter Ausdruck für Datum und Uhrzeit nach ISO8601. Z.B. nur das Datum funktioniert. Das fühlt sich an wie ein Fehler oder ist es ein Konfigurationsproblem?
Mein Paket Referenzen sind:
<PackageReference Include="dotnetrdf" Version="1.0.12" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="VDS.Common" Version="1.8.0" />
Meine Vermutung ist, dass der zugrunde liegende JSON-Parser (Newtonsoft) intelligent zu sein versucht und erkennt die Zeichenfolge etwas zu sein, es in ein Date-Objekt übersetzen. Da ich ein Anfänger in C# bin, sind meine Debugging-Fähigkeiten etwas wackelig, so dass ich beim Raten feststecke.
Jede Art von Anleitung wird sehr geschätzt.
Json.Net nicht "versuchen, smart zu sein". Das ist das erwartete Verhalten. .NET-Entwickler würden sich auflehnen, wenn es nicht so funktioniert. Wenn Sie ein Feld nicht analysieren möchten, können Sie es anweisen, das Feld als Zeichenfolge zu lesen, ein Attribut für die Zielklasse zu verwenden oder [die Standardeinstellungen für die Serialisierung zu ändern] (https://www.newtonsoft.com/ json/help/html/DefaultSettings.htm) und setzen [JsonSerializerSettings.DateParseHandling] (https://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_DateParseHandling.htm) auf [Keine] (https: //www.newtonsoft .com/json/help/html/T_Newtonsoft_Json_DateParseHandling.htm) –