protected override void WriteLiteral(ILiteralNode node) { var token = null as JToken; if (!string.IsNullOrEmpty(node.Language)) { token = new JObject( new JProperty( JsonLd.Language, node.Language), new JProperty( JsonLd.Value, node.Value)); } else { var vn = node.AsValuedNode(); switch (vn) { case StringNode valueNode: token = new JValue(valueNode.AsString()); break; case BooleanNode valueNode: token = new JValue(valueNode.AsBoolean()); break; case LongNode valueNode: token = new JValue(valueNode.AsInteger()); break; case DoubleNode valueNode: token = new JValue(valueNode.AsDouble()); break; } if (token == null || vn is StringNode stringNode && node.DataType != null && vn.EffectiveType != XmlSpecsHelper.XmlSchemaDataTypeString) { token = new JObject( new JProperty( JsonLd.Type, this.MakeRelative(node.DataType, this.Settings.VocabularyUri)), new JProperty( JsonLd.Value, node.Value)); } } if (this.Settings.AlwaysUseStructuredLiterals && token is JValue) { token = new JObject( new JProperty( JsonLd.Value, token)); } this.writer.WriteToken(token.CreateReader()); }
private void RoundTripValuedNodeConversion <T>(dynamic value, Func <IValuedNode, T> convertBack) { // given ILiteralNode literalNode = LiteralExtensions.ToLiteral(value, _graph); // when IValuedNode valuedNode = literalNode.AsValuedNode(); T convertedBack = convertBack(valuedNode); // then Assert.AreEqual(value, convertedBack); }
public void NodeToLiteralDateTimePrecision4() { DateTime now = DateTime.Now; NodeFactory factory = new NodeFactory(); ILiteralNode litNow = now.ToLiteral(factory, false); //Print out Console.WriteLine("Original: " + now.ToString(XmlSpecsHelper.XmlSchemaDateTimeFormat)); NTriplesFormatter formatter = new NTriplesFormatter(); Console.WriteLine("Node Form: " + formatter.Format(litNow)); //Extract and check it round tripped DateTimeOffset now2 = litNow.AsValuedNode().AsDateTime(); Console.WriteLine("Extracted: " + now2.ToString(XmlSpecsHelper.XmlSchemaDateTimeFormat)); TimeSpan diff = now - now2; Console.WriteLine("Difference: " + diff.ToString()); Assert.True(diff < new TimeSpan(0, 0, 1), "Loss of precision should be at most 1 second"); }