diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index f9c3c0a5..552d1ecd 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -125,6 +125,29 @@ namespace Newtonsoft.Json.Tests.Converters } #if !NET20 + public class MyModel + { + public string MyProperty { get; set; } + } + + [Test] + public void ConvertNullString() + { + JObject json = new JObject(); + json["Prop1"] = (string)null; + json["Prop2"] = new MyModel().MyProperty; + + var xmlNodeConverter = new XmlNodeConverter { DeserializeRootElementName = "object" }; + var jsonSerializerSettings = new JsonSerializerSettings { Converters = new JsonConverter[] { xmlNodeConverter } }; + var jsonSerializer = JsonSerializer.CreateDefault(jsonSerializerSettings); + XDocument d = json.ToObject(jsonSerializer); + + StringAssert.Equals(@" + + +", d.ToString()); + } + public class Foo { public XElement Bar { get; set; } diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 775e88ca..709f4432 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1411,7 +1411,11 @@ namespace Newtonsoft.Json.Converters || reader.TokenType == JsonToken.Boolean || reader.TokenType == JsonToken.Date) { - element.AppendChild(document.CreateTextNode(ConvertTokenToXmlValue(reader))); + string text = ConvertTokenToXmlValue(reader); + if (text != null) + { + element.AppendChild(document.CreateTextNode(text)); + } } else if (reader.TokenType == JsonToken.Null) { @@ -1446,7 +1450,7 @@ namespace Newtonsoft.Json.Converters { if (reader.TokenType == JsonToken.String) { - return reader.Value.ToString(); + return (reader.Value != null) ? reader.Value.ToString() : null; } else if (reader.TokenType == JsonToken.Integer) {