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 @@
-
+