Add APISocietyToolBox source files
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Xml.Linq;
|
||||
|
||||
|
||||
namespace APISocietyToolBox.Functions
|
||||
{
|
||||
public class ConvertFunctions
|
||||
{
|
||||
public static string ConvertJsonToXml(string jsonString)
|
||||
{
|
||||
// Parse JSON
|
||||
var jsonDocument = JsonDocument.Parse(jsonString);
|
||||
|
||||
// Create an XML document
|
||||
var xmlDocument = new XDocument(
|
||||
new XElement("Root",
|
||||
ConvertJsonElementToXml(jsonDocument.RootElement)
|
||||
)
|
||||
);
|
||||
|
||||
return xmlDocument.ToString();
|
||||
}
|
||||
|
||||
static XElement ConvertJsonElementToXml(JsonElement jsonElement)
|
||||
{
|
||||
var element = new XElement(jsonElement.ValueKind.ToString());
|
||||
|
||||
switch (jsonElement.ValueKind)
|
||||
{
|
||||
case JsonValueKind.Object:
|
||||
foreach (var property in jsonElement.EnumerateObject())
|
||||
{
|
||||
element.Add(new XElement(property.Name, ConvertJsonElementToXml(property.Value)));
|
||||
}
|
||||
break;
|
||||
|
||||
case JsonValueKind.Array:
|
||||
foreach (var item in jsonElement.EnumerateArray())
|
||||
{
|
||||
element.Add(ConvertJsonElementToXml(item));
|
||||
}
|
||||
break;
|
||||
|
||||
case JsonValueKind.String:
|
||||
case JsonValueKind.Number:
|
||||
case JsonValueKind.True:
|
||||
case JsonValueKind.False:
|
||||
element.Value = jsonElement.GetRawText();
|
||||
break;
|
||||
|
||||
case JsonValueKind.Null:
|
||||
// Handle null values if needed
|
||||
break;
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
public static string ConvertJsonToXmlR2(string jsonString, string rootElementName, string objectElementName)
|
||||
{
|
||||
// Parse JSON to JObject
|
||||
JObject jsonObject = JObject.Parse(jsonString);
|
||||
|
||||
// Create the root XML element with the user-defined name
|
||||
XElement rootElement = new XElement(rootElementName);
|
||||
|
||||
// Create the object XML element with the user-defined name
|
||||
XElement objectElement = new XElement(objectElementName);
|
||||
|
||||
// Convert JSON properties to XML elements with values
|
||||
foreach (var property in jsonObject.Properties())
|
||||
{
|
||||
// Create XML element and add the value
|
||||
XElement element = new XElement(property.Name, (property.Value.ToString().Replace("/", "/")));
|
||||
|
||||
// Add the element to the object element
|
||||
objectElement.Add(element);
|
||||
}
|
||||
|
||||
// Add the object element to the root element
|
||||
rootElement.Add(objectElement);
|
||||
|
||||
// Convert the XElement to an XML string
|
||||
string xmlString = rootElement.ToString();
|
||||
|
||||
return xmlString;
|
||||
}
|
||||
|
||||
public static string ConvertJsonToXmlR3(string jsonString, string rootElementName, string objectElementName)
|
||||
{
|
||||
// Parse JSON to JObject
|
||||
JObject jsonObject = JObject.Parse(jsonString);
|
||||
|
||||
// Create the root XML element with the user-defined name
|
||||
XElement rootElement = new XElement(rootElementName);
|
||||
|
||||
// Convert JSON properties to XML elements with values
|
||||
foreach (var property in jsonObject.Properties())
|
||||
{
|
||||
if (property.Name == "TransactionDate" && property.Value.Type == JTokenType.Date)
|
||||
{
|
||||
// Special handling for TransactionDate property with date type
|
||||
XElement dateElement = new XElement(SanitizeElementName(property.Name), ((DateTime)property.Value).ToString("yyyy-MM-ddTHH:mm:ss"));
|
||||
rootElement.Add(dateElement);
|
||||
}
|
||||
else if (property.Name == "itemDetails" || property.Name == "ledgerDetails" || property.Name == "batchDetails" || property.Name == "billDetails" || property.Name == "otherDetails")
|
||||
{
|
||||
// Handle arrays separately
|
||||
XElement arrayElement = new XElement(SanitizeElementName(property.Name + "Models"));
|
||||
rootElement.Add(arrayElement);
|
||||
|
||||
foreach (var arrayItem in property.Value)
|
||||
{
|
||||
XElement objectElement = new XElement(objectElementName);
|
||||
ConvertJTokenToXml(arrayItem, objectElement);
|
||||
arrayElement.Add(objectElement);
|
||||
}
|
||||
}
|
||||
else if (property.Value.Type == JTokenType.Array)
|
||||
{
|
||||
// If the property value is an array, recursively convert it to XML
|
||||
rootElement.Add(ConvertArrayToXml(property, objectElementName));
|
||||
}
|
||||
else if (property.Value.Type == JTokenType.Object)
|
||||
{
|
||||
// If the property value is an object, recursively convert it to XML
|
||||
XElement objectElement = new XElement(objectElementName);
|
||||
ConvertJTokenToXml(property.Value, objectElement);
|
||||
rootElement.Add(objectElement);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create XML element and add the value
|
||||
XElement element = new XElement(SanitizeElementName(property.Name), property.Value.ToString());
|
||||
rootElement.Add(element);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert the XElement to an XML string
|
||||
string xmlString = rootElement.ToString();
|
||||
|
||||
return xmlString;
|
||||
}
|
||||
|
||||
|
||||
public static string ConvertJsonArrayToXmlR1(string jsonArray, string rootElementName, string itemElementName)
|
||||
{
|
||||
// Parse JSON array to JArray
|
||||
JArray array = JArray.Parse(jsonArray);
|
||||
|
||||
// Create the root XML element with the user-defined name
|
||||
XElement rootElement = new XElement(rootElementName);
|
||||
|
||||
// Convert each JSON object in the array to XML elements
|
||||
foreach (JObject item in array)
|
||||
{
|
||||
// Create an item element for each item in the array
|
||||
XElement itemElement = new XElement(itemElementName);
|
||||
|
||||
// Convert JSON properties to XML elements with values for each item
|
||||
foreach (var property in item.Properties())
|
||||
{
|
||||
// Add property value to XML
|
||||
itemElement.Add(new XElement(property.Name, property.Value.ToString()));
|
||||
}
|
||||
|
||||
// Add the item element to the root element
|
||||
rootElement.Add(itemElement);
|
||||
}
|
||||
|
||||
// Convert the XElement to an XML string
|
||||
string xmlString = rootElement.ToString();
|
||||
|
||||
return xmlString;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Helper method to recursively convert JToken to XML
|
||||
private static XElement ConvertJTokenToXml(JToken token, XElement parentElement)
|
||||
{
|
||||
if (token.Type == JTokenType.Object)
|
||||
{
|
||||
foreach (var property in token.Children<JProperty>())
|
||||
{
|
||||
XElement childElement = new XElement(SanitizeElementName(property.Name));
|
||||
parentElement.Add(childElement);
|
||||
ConvertJTokenToXml(property.Value, childElement);
|
||||
}
|
||||
}
|
||||
else if (token.Type == JTokenType.Array)
|
||||
{
|
||||
foreach (var arrayItem in token)
|
||||
{
|
||||
XElement objectElement = new XElement(parentElement.Name);
|
||||
ConvertJTokenToXml(arrayItem, objectElement);
|
||||
parentElement.Add(objectElement);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
parentElement.Value = token.ToString();
|
||||
}
|
||||
return parentElement;
|
||||
}
|
||||
|
||||
// Helper method to convert JToken array to XML
|
||||
private static XElement ConvertArrayToXml(JProperty property, string objectElementName)
|
||||
{
|
||||
XElement arrayElement = new XElement(SanitizeElementName(property.Name));
|
||||
foreach (var arrayItem in property.Value)
|
||||
{
|
||||
XElement objectElement = new XElement(objectElementName);
|
||||
ConvertJTokenToXml(arrayItem, objectElement);
|
||||
arrayElement.Add(objectElement);
|
||||
}
|
||||
return arrayElement;
|
||||
}
|
||||
|
||||
// Helper method to sanitize XML element names
|
||||
private static string SanitizeElementName(string name)
|
||||
{
|
||||
// Check if the name is not null or empty before replacing characters
|
||||
if (!string.IsNullOrEmpty(name))
|
||||
{
|
||||
// Replace invalid characters with underscore
|
||||
return name.Replace(" ", "_"); // You can adjust this sanitization logic as needed
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the name is null or empty, return a default name or handle it according to your requirements
|
||||
return "UnknownElement";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user