diff --git a/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md b/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md index 7d06d2c..f5b316c 100644 --- a/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md +++ b/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [2.1.0] - 2026-06-11 +### Fixed +- Fix a case when we want to return null value for non-string types. + ## [2.0.0] - 2026-05-27 ### Breaking - The `XSD` parameter has moved from the **Input** tab to the **Options** tab and is now only used (and shown) when `TypeCorrection` is `Schema`. diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs index 31b3401..8f2af9b 100644 --- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs +++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs @@ -848,4 +848,90 @@ public void SchemaMode_WithoutXsd_ShouldNotConvertInlineXsiTypes() Assert.AreEqual(JTokenType.String, price["#text"].Type); Assert.AreEqual("12.5", price["#text"].ToString()); } -} \ No newline at end of file + + [TestMethod] + public void SchemaMode_FoobarEmptyNillableNonString_ShouldBecomeNull() + { + var input = new Input() + { + XML = @" + + + + " + }; + + var options = new Options() + { + TypeCorrection = TypeCorrectionMode.Schema, + XSD = @" + + + + + + + + + + " + }; + + var result = JSON.ConvertXMLStringToJToken(input, options); + var foobar1 = ((JObject)result.Jtoken)["root"]?["foobar1"]; + var foobar2 = ((JObject)result.Jtoken)["root"]?["foobar2"]; + var foobar3 = ((JObject)result.Jtoken)["root"]?["foobar3"]; + Assert.IsNotNull(foobar1); + Assert.IsNotNull(foobar2); + Assert.IsNotNull(foobar3); + Assert.AreEqual(JTokenType.Null, foobar1.Type); + Assert.AreEqual(JTokenType.Null, foobar2.Type); + Assert.AreEqual(JTokenType.Null, foobar3.Type); + } + + [TestMethod] + public void SchemaMode_FoobarNonString_ShouldBecomeValidType() + { + var input = new Input() + { + XML = @" + 3 + 2.3 + true + " + }; + + var options = new Options() + { + TypeCorrection = TypeCorrectionMode.Schema, + XSD = @" + + + + + + + + + + " + }; + + var result = JSON.ConvertXMLStringToJToken(input, options); + var foobar1 = ((JObject)result.Jtoken)["root"]?["foobar1"]; + var foobar2 = ((JObject)result.Jtoken)["root"]?["foobar2"]; + var foobar3 = ((JObject)result.Jtoken)["root"]?["foobar3"]; + + Assert.IsNotNull(foobar1); + Assert.IsNotNull(foobar2); + Assert.IsNotNull(foobar3); + + Assert.AreEqual(JTokenType.Integer, foobar1.Type); + Assert.AreEqual(JTokenType.Float, foobar2.Type); + Assert.AreEqual(JTokenType.Boolean, foobar3.Type); + + Assert.AreEqual(3, foobar1.Value()); + Assert.AreEqual(2.3, foobar2.Value()); + Assert.AreEqual(true, foobar3.Value()); + } +} diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs index 64a6af9..c9c2d6c 100644 --- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs +++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs @@ -431,7 +431,13 @@ private static bool ApplyXsiNil( if (nilFlag == true) { nilProperty.Remove(); - ReplaceOrClearWrapper(obj, textProperty, JValue.CreateNull()); + var typePropertyForNil = FindXsiTypeProperty(obj, xmlnsScope); + typePropertyForNil?.Remove(); + + if (obj.Parent != null) + obj.Replace(JValue.CreateNull()); + else + ReplaceOrClearWrapper(obj, textProperty, JValue.CreateNull()); return true; } diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.csproj b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.csproj index feb23d9..2384cd4 100644 --- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.csproj +++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.csproj @@ -2,7 +2,7 @@ net6.0 - 2.0.0 + 2.1.0 Frends Frends Frends @@ -14,7 +14,7 @@ https://frends.com/ https://github.com/FrendsPlatform/Frends.JSON2/tree/main/Frends.JSON.ConvertXMLStringToJToken - + PreserveNewest @@ -22,7 +22,7 @@ - +