From 092dc7da58dc1af088a83b6537d7b2e8527b3de3 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 29 Apr 2016 19:18:06 +1200 Subject: [PATCH] -Fixed JValue.WriteTo losing type information with JTokenWriter --- .../Linq/LinqToJsonTest.cs | 18 ++++++++++++++++++ Src/Newtonsoft.Json/Linq/JValue.cs | 6 ++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs b/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs index 346404e4..c604c0c7 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs @@ -55,6 +55,24 @@ namespace Newtonsoft.Json.Tests.Linq [TestFixture] public class LinqToJsonTest : TestFixtureBase { + [Test] + public void FromObjectGuid() + { + var token1 = new JValue(Guid.NewGuid()); + var token2 = JToken.FromObject(token1); + Assert.IsTrue(JToken.DeepEquals(token1, token2)); + Assert.AreEqual(token1.Type, token2.Type); + } + + [Test] + public void FromObjectTimeSpan() + { + var token1 = new JValue(TimeSpan.FromDays(1)); + var token2 = JToken.FromObject(token1); + Assert.IsTrue(JToken.DeepEquals(token1, token2)); + Assert.AreEqual(token1.Type, token2.Type); + } + [Test] public void ToObject_Guid() { diff --git a/Src/Newtonsoft.Json/Linq/JValue.cs b/Src/Newtonsoft.Json/Linq/JValue.cs index 8dd1297e..575dbe37 100644 --- a/Src/Newtonsoft.Json/Linq/JValue.cs +++ b/Src/Newtonsoft.Json/Linq/JValue.cs @@ -819,11 +819,13 @@ namespace Newtonsoft.Json.Linq writer.WriteValue((byte[])_value); return; case JTokenType.Guid: + writer.WriteValue((_value != null) ? (Guid?)_value : null); + return; case JTokenType.TimeSpan: - writer.WriteValue((_value != null) ? _value.ToString() : null); + writer.WriteValue((_value != null) ? (TimeSpan?)_value : null); return; case JTokenType.Uri: - writer.WriteValue((_value != null) ? ((Uri)_value).OriginalString : null); + writer.WriteValue((Uri)_value); return; }