c# xml 转 json
在C#中,可以使用下面几种方法将XML转换为JSON:
-
使用Newtonsoft.Json库:
using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.Xml; // 从XML字符串转换为JSON字符串 string xmlString = "<root><name>John</name><age>30</age></root>"; XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlString); string jsonString = JsonConvert.SerializeXmlNode(xml); // 从XML文件转换为JSON字符串 string xmlFilePath = "path/to/xml/file.xml"; XmlDocument xml = new XmlDocument(); xml.Load(xmlFilePath); string jsonString = JsonConvert.SerializeXmlNode(xml); // 从XML字符串转换为JObject string xmlString = "<root><name>John</name><age>30</age></root>"; XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlString); JObject jsonObject = JObject.Parse(JsonConvert.SerializeXmlNode(xml)); // 从XML文件转换为JObject string xmlFilePath = "path/to/xml/file.xml"; XmlDocument xml = new XmlDocument(); xml.Load(xmlFilePath); JObject jsonObject = JObject.Parse(JsonConvert.SerializeXmlNode(xml));
-
使用System.Xml.Linq库:
using System.Xml.Linq; using System.Text.Json; // 从XML字符串转换为JSON字符串 string xmlString = "<root><name>John</name><age>30</age></root>"; XDocument xml = XDocument.Parse(xmlString); string jsonString = JsonSerializer.Serialize(xml.ToJson()); // 从XML文件转换为JSON字符串 string xmlFilePath = "path/to/xml/file.xml"; XDocument xml = XDocument.Load(xmlFilePath); string jsonString = JsonSerializer.Serialize(xml.ToJson()); // 从XML字符串转换为JsonObject string xmlString = "<root><name>John</name><age>30</age></root>"; XDocument xml = XDocument.Parse(xmlString); JsonObject jsonObject = JsonSerializer.Deserialize<JsonObject>(xml.ToJson()); // 从XML文件转换为JsonObject string xmlFilePath = "path/to/xml/file.xml"; XDocument xml = XDocument.Load(xmlFilePath); JsonObject jsonObject = JsonSerializer.Deserialize<JsonObject>(xml.ToJson());
上述代码中,将XML转换为JSON时,使用了第三方库Newtonsoft.Json或者系统自带库System.Text.Json。
c# json 转 xml
在C#中将JSON转换为XML可以使用以下两种不同的实现方法:
-
使用Newtonsoft.Json库和System.Xml.Serialization库:
using Newtonsoft.Json; using System.Xml.Serialization; // 定义JSON数据结构 public class MyData { public string Name { get; set; } public int Age { get; set; } } // JSON转XML方法1 public static string ConvertJsonToXml(string json) { // 将JSON反序列化为对象 var data = JsonConvert.DeserializeObject<MyData>(json); // 创建XML序列化器 var serializer = new XmlSerializer(typeof(MyData)); // 创建StringWriter来接收序列化结果 using (var stringWriter = new StringWriter()) { // 使用XmlSerializer将对象序列化为XML serializer.Serialize(stringWriter, data); // 返回序列化结果 return stringWriter.ToString(); } } // JSON转XML方法2 public static string ConvertJsonToXml(string json) { // 使用Newtonsoft.Json库的JObject.Parse方法将JSON解析为JObject对象 var jObject = JObject.Parse(json); // 使用System.Xml.Linq库的XDocument.Parse方法创建XDocument对象 var xDocument = new XDocument(); // 创建根节点 var rootElement = new XElement("Root"); // 将JObject转换为XML节点并添加到根节点中 ConvertJObjectToXElement(jObject, rootElement); // 将根节点添加到XDocument中 xDocument.Add(rootElement); // 返回XDocument的XML字符串表示 return xDocument.ToString(); } // 将JObject递归转换为XML节点 private static XElement ConvertJObjectToXElement(JObject jObject, XElement parent) { foreach (var property in jObject.Properties()) { var propertyElement = new XElement(property.Name); if (property.Value.Type == JTokenType.Object) { // 如果是子JObject则递归调用 ConvertJObjectToXElement((JObject)property.Value, propertyElement); } else if (property.Value.Type == JTokenType.Array) { // 如果是JArray则递归遍历所有元素 foreach (var item in property.Value.Children()) { if (item.Type == JTokenType.Object) { var arrayItemElement = new XElement(property.Name); ConvertJObjectToXElement((JObject)item, arrayItemElement); parent.Add(arrayItemElement); } else { var arrayItemElement = new XElement(property.Name, item.ToString()); parent.Add(arrayItemElement); } } } else { // 处理基本数据类型 propertyElement.Value = property.Value.ToString(); } parent.Add(propertyElement); } return parent; }
以上代码分别使用了Newtonsoft.Json库和System.Xml.Serialization库,效果相同但实现方式不同。第一种方法使用XmlSerializer将JSON对象直接序列化为XML,适用于简单数据结构。第二种方法使用JObject解析JSON,然后使用XDocument和XElement将解析结果转换为XML,适用于复杂数据结构。
请注意,在使用这些库之前需要先导入相关的命名空间。