You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将XML转换为无数组名称的JSON?

如何将XML转换为无外层键的纯JSON数组(基于Newtonsoft.Json)

问题背景

现有如下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <UserData>
      <User_Email>cynthia48@example.com</User_Email>
      <User_Name>Louis Hebert</User_Name>
      <User_State>South Dakota</User_State>
      <id>item1</id>
   </UserData>
   <UserData>
      <User_Email>brian52@example.com</User_Email>
      <User_Name>David Lewis</User_Name>
      <User_State>Connecticut</User_State>
      <id>item2</id>
   </UserData>
</root>

使用以下C#代码转换后:

XmlDocument xmldoc = new XmlDocument();
string xml1 = @"D:\Visual_Codes\Xml_Files\Data.xml";
xmldoc.Load(xml1);
xmldoc.RemoveChild(xmldoc.FirstChild);
string js = JsonConvert.SerializeXmlNode(xmldoc, Newtonsoft.Json.Formatting.Indented, true);

得到的JSON会包含外层的UserData键:

{
  "UserData": [
    {
      "User_Email": "cynthia48@example.com",
      "User_Name": "Louis Hebert",
      "User_State": "South Dakota",
      "id": "item1"
    },
    {
      "User_Email": "brian52@example.com",
      "User_Name": "David Lewis",
      "User_State": "Connecticut",
      "id": "item2"
    }
  ]
}

需要将其转换为无外层键的纯JSON数组:

[
    {
      "User_Email": "cynthia48@example.com",
      "User_Name": "Louis Hebert",
      "User_State": "South Dakota",
      "id": "item1"
    },
    {
      "User_Email": "brian52@example.com",
      "User_Name": "David Lewis",
      "User_State": "Connecticut",
      "id": "item2"
    }
]

解决方案

方法1:序列化后提取数组节点

先按原方式得到带外层键的JSON,再用Newtonsoft.Json的JObject解析,取出UserData数组后重新序列化:

XmlDocument xmldoc = new XmlDocument();
string xml1 = @"D:\Visual_Codes\Xml_Files\Data.xml";
xmldoc.Load(xml1);
xmldoc.RemoveChild(xmldoc.FirstChild);

// 先序列化得到带外层的JSON
string jsonWithWrapper = JsonConvert.SerializeXmlNode(xmldoc, Newtonsoft.Json.Formatting.Indented, true);

// 解析为JObject,提取UserData数组
JObject jsonObj = JObject.Parse(jsonWithWrapper);
JArray userDataArray = (JArray)jsonObj["UserData"];

// 序列化数组得到最终结果
string pureArrayJson = userDataArray.ToString(Newtonsoft.Json.Formatting.Indented);

方法2:直接序列化XML节点集合

跳过序列化整个XML文档,直接获取所有UserData节点,将节点集合转换为JSON数组:

XmlDocument xmldoc = new XmlDocument();
string xml1 = @"D:\Visual_Codes\Xml_Files\Data.xml";
xmldoc.Load(xml1);

// 获取所有UserData节点
XmlNodeList userNodes = xmldoc.SelectNodes("//UserData");

// 序列化节点集合
string pureArrayJson = JsonConvert.SerializeXmlNode(userNodes, Newtonsoft.Json.Formatting.Indented, true);

这种方法更直接,不需要处理中间的JSON对象,一步到位得到纯数组格式的JSON。


内容的提问来源于stack exchange,提问作者Ayan Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:27:31