c# Xml 和 Json 转换方法记录

c# xml 转 json

在C#中,可以使用下面几种方法将XML转换为JSON:

  1. 使用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));
  2. 使用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可以使用以下两种不同的实现方法:

  1. 使用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,适用于复杂数据结构。

    请注意,在使用这些库之前需要先导入相关的命名空间。

相关推荐
泽虞1 分钟前
《Qt应用开发》笔记
linux·开发语言·c++·笔记·qt
报错小能手2 分钟前
linux学习笔记(21)线程同步——互斥锁
linux·笔记·学习
一只积极向上的小咸鱼35 分钟前
Windows中通过wsl运行Ubuntu
linux·运维·ubuntu
爱吃汽的小橘1 小时前
异步串口通信和逻辑分析仪
运维·服务器·网络·单片机·嵌入式硬件·fpga开发
ayaya_mana1 小时前
Linux环境下Node.js任意版本安装与pnpm、yarn包管理
linux·node.js·vim
乌龙玛奇朵5191 小时前
Finalshell建立连接
linux
Maple_land2 小时前
Linux进程第八讲——进程状态全景解析(二):从阻塞到消亡的完整生命周期
linux·运维·服务器·c++·centos
嵌入式分享2 小时前
嵌入式分享#41:RK3576改UART波特率【精简版】
linux·嵌入式硬件·ubuntu·嵌入式
爱吃生蚝的于勒2 小时前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
量子物理学2 小时前
Eclipse Mosquitto 在小内存下怎么修改配置文件
java·服务器·eclipse