diff --git a/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md b/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md
index 20be4d0..6b771fb 100644
--- a/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md
+++ b/Frends.JSON.ConvertXMLStringToJToken/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## [1.2.0] - 2025-01-13
+### Added
+- Added ConvertAsArrayPaths parameter that specify which XML elements should be converted to arrays.
+
## [1.1.0] - 2024-08-20
### Updated
- Updated Newtonsoft.Json library to the latest version 13.0.3.
diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs
index 77a4a9a..2591372 100644
--- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs
+++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken.Tests/UnitTests.cs
@@ -29,4 +29,30 @@ public void ShouldConvertXmlStringToJToken()
Assert.IsTrue(result.Success);
Assert.IsInstanceOfType(result.Jtoken, typeof(JObject));
}
+
+ [TestMethod]
+ public void ConvertXMLStringToJToken_WithConvertAsArrayPaths_ShouldTreatSingleItemsAsArrays()
+ {
+ var input = new Input()
+ {
+ XML = @"
+
+ - item1
+
+
+ category1
+
+ ",
+ ConvertAsArrayPaths = new[] { "$.root.items.item" }
+ };
+ var result = JSON.ConvertXMLStringToJToken(input);
+
+ Assert.IsTrue(result.Success);
+
+ Assert.AreEqual(result.Jtoken["root"]["items"]["item"].Type, JTokenType.Array);
+ Assert.AreEqual(result.Jtoken["root"]["items"]["item"][0].ToString(), "item1");
+
+ Assert.AreEqual(result.Jtoken["root"]["categories"]["category"].Type, JTokenType.String);
+ Assert.AreEqual(result.Jtoken["root"]["categories"]["category"].ToString(), "category1");
+ }
}
\ No newline at end of file
diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs
index d03892e..6368283 100644
--- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs
+++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/ConvertXMLStringToJToken.cs
@@ -2,6 +2,7 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.ComponentModel;
+using System.Linq;
using System.Xml;
namespace Frends.JSON.ConvertXMLStringToJToken;
@@ -22,6 +23,25 @@ public static Result ConvertXMLStringToJToken([PropertyTab] Input input)
var doc = new XmlDocument();
doc.LoadXml(input.XML);
var jsonString = JsonConvert.SerializeXmlNode(doc);
- return new Result(true, JToken.Parse(jsonString));
+ var jToken = JToken.Parse(jsonString);
+
+ if (input.ConvertAsArrayPaths != null && input.ConvertAsArrayPaths.Length > 0)
+ {
+ foreach (var path in input.ConvertAsArrayPaths)
+ {
+ var matchingTokens = jToken.SelectTokens(path).ToList();
+
+ foreach (var token in matchingTokens)
+ {
+ if (token.Type != JTokenType.Array)
+ {
+ var array = new JArray(token);
+ token.Replace(array);
+ }
+ }
+ }
+ }
+
+ return new Result(true, jToken);
}
}
\ No newline at end of file
diff --git a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Definitions/Input.cs b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Definitions/Input.cs
index bb92971..0489f4b 100644
--- a/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Definitions/Input.cs
+++ b/Frends.JSON.ConvertXMLStringToJToken/Frends.JSON.ConvertXMLStringToJToken/Definitions/Input.cs
@@ -10,4 +10,12 @@ public class Input
///
/// <?xml version='1.0' standalone='no'?><root><foos id = '1' ><foo>bar</name></foos></root>
public string XML { get; set; }
+
+ ///
+ /// A list of JSONPath expressions that specify which JSON elements should always be converted to arrays.
+ ///
+ ///
+ /// new[] { "$.root.items.item" }
+ ///
+ public string[] ConvertAsArrayPaths { get; set; }
}
\ No newline at end of file
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 6a0ddfb..06714cc 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
- 1.1.0
+ 1.2.0
Frends
Frends
Frends