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

C#中JSON转XML时如何为数组元素添加自定义包裹标签

JSON转XML自定义数组节点标签解决方案

你当前转换结果不符合预期,是因为Newtonsoft.Json的DeserializeXmlNode方法默认会将JSON数组的键名直接作为数组元素的XML标签名,你定义的数组键为properties,所以每个数组项都会生成<properties>标签,导致结构不符合目标系统要求,可通过以下两种方案调整:


方案1:预处理JSON结构(最简方案,无需额外转换后处理)

无需修改原有转换逻辑,只需要在调用转换方法前,动态调整JSON中properties数组的结构,将原数组套入一层对象,将数组键名改为property即可。
示例代码如下:

// 先将原始JSON解析为JObject对象
JObject originalJson = JObject.Parse(jsonString);
// 提取原properties数组
JArray propArray = (JArray)originalJson["properties"];
// 重构properties节点结构
originalJson["properties"] = new JObject(new JProperty("property", propArray));
// 调用原有转换方法,直接生成符合要求的XML
XmlDocument node = JsonConvert.DeserializeXmlNode(originalJson.ToString(), "tag");

方案2:转换完成后修改XML节点结构

如果不希望改动JSON处理逻辑,也可以在得到XML对象后,手动调整节点的名称和层级:

XmlDocument node = JsonConvert.DeserializeXmlNode(jsonString, "tag");
// 查找根节点下所有原properties子节点
XmlNodeList oldPropNodes = node.SelectNodes("/tag/properties");
// 创建新的properties父节点
XmlElement newPropParent = node.CreateElement("properties");
// 遍历所有旧properties节点,重命名为property后移入新父节点
foreach (XmlNode oldNode in oldPropNodes)
{
    XmlElement newPropItem = node.CreateElement("property");
    newPropItem.InnerXml = oldNode.InnerXml;
    newPropParent.AppendChild(newPropItem);
    // 删除原节点
    oldNode.ParentNode.RemoveChild(oldNode);
}
// 将重构完成的properties父节点加入根节点
node.DocumentElement.AppendChild(newPropParent);

注意事项

你贴出的转换结果中存在<externalGuid>的闭合标签错误写为</comosUID>的问题,如果是实际转换结果存在该错误,需要先检查输入JSON的键名是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:00