C# 将多个XML转换为JSON列表

C# 将多个XML转换为JSON列表,c#,json,xml,powershell,C#,Json,Xml,Powershell,我想使用PowerShell脚本将具有相同XML属性格式的多个XML文件转换为JSON文件。其思想是创建一个JSON列表,其中每个项目都是XML文件的JSON表示。这可行吗?输入和输出示例: 输入: File1.xml: 第一个xml子对象1 第一个xml子对象2 File2.xml: 第二个xml子项1 第二个xml子对象2 输出: [ { 文件:[ {Child1:First xml child 1}, {Child2:第一个xml子2} ] }, { 文件:[ {Child1:Se

我想使用PowerShell脚本将具有相同XML属性格式的多个XML文件转换为JSON文件。其思想是创建一个JSON列表,其中每个项目都是XML文件的JSON表示。这可行吗?输入和输出示例:

输入:

File1.xml


第一个xml子对象1
第一个xml子对象2
File2.xml


第二个xml子项1
第二个xml子对象2
输出:

[
{
文件:[
{Child1:First xml child 1},
{Child2:第一个xml子2}
]
},
{
文件:[
{Child1:Second xml child 1},
{Child2:第二个xml子2}
]
}
]

在这上面写下你自己的格式

// To convert an XML node contained in string xml into a JSON string   
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

下面使用一个助手函数,
ConvertFrom-Xml
,仅将非常简单的Xml文档(如示例文档)转换为带顺序键的嵌套哈希表,然后可以使用
ConvertTo-JSON
将其转换为JSON:

将*简单*XML文档转换为嵌套哈希表的辅助函数 #用有序的钥匙。 从Xml转换函数{ param([参数(必需,ValueFromPipeline)][System.Xml.XmlNode]$node) 过程{ 如果($node.DocumentElement){$node=$node.DocumentElement} $oht=[有序]@{} $name=$node.name if($node.FirstChild-is[system.xml.xmltext]){ $oht.$name=$node.FirstChild.InnerText }否则{ $oht.$name=新对象System.Collections.ArrayList foreach($node.ChildNodes中的子节点){ $null=$oht.$name.Add((从Xml转换为$child)) } } $oht } } [xml[](获取内容-原始文件[12].xml)|从xml转换为Json-深度3 对于示例文件,这将产生:

[
{
“文件”:[
{
“Child1”:“第一个xml子1”
},
{
“Child2”:“第一个xml子2”
}
]
},
{
“文件”:[
{
“Child1”:“第二个xml子1”
},
{
“Child2”:“第二个xml子2”
}
]
}
]

在Powershell 7中,这适用于我:

get-content file.xml

<node>
  <subnode attrib="this">hi</subnode>
</node>


[xml]$xml = get-content file.xml                             

[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)

{"node":{"subnode":{"@attrib":"this","#text":"hi"}}}
get content file.xml
你好
[xml]$xml=get content file.xml
[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)
{“node”:{“subnode”:{“@attrib”:“this”,“#text”:“hi”}}

“它可行吗?”当然可以。但是,在这里,其他人不会为您编写代码。到目前为止,您尝试了什么(显示您的代码),以及您需要帮助解决什么具体问题(代码中)?请允许我向新来者提供标准建议:如果答案解决了您的问题,请单击大复选标记接受它(✓) 在它旁边,也可以选择向上投票(向上投票需要至少15个信誉点)。如果您发现其他答案有帮助,请向上投票。接受(为此您将获得2个信誉点)和up voting有助于未来的读者。有关更多信息,请参阅。或者使用内置的
JavaScriptSerializer
不依赖外部软件包,在PowerShell中,它可能会变得非常简单。我不确定OP为什么会在他们的问题中添加C#标记,但从问题文本中可以清楚地看出,他们需要PowerShell脚本。因此,如何将其转换为PowerShell脚本?完整的类型名称是什么,所有类型都是预安装的,还是需要下载依赖项?@mklement0
[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)
谢谢,@js2010。我的评论旨在鼓励SGRao更新他们的答案以提供此类信息。请注意,
NewtonSoft.Json
程序集不随Windows PowerShell提供(它随PowerShell[Core]提供)。我鼓励您发布自己的答案,其中显示了完整的PowerShell示例以及有关程序集可用性/如何获取程序集的背景信息。虽然(默认情况下)在Windows PowerShell中不可用(PowerShell版本高达v5.1),但这绝对是一个值得考虑的备选方案;在本案中,这将产生与问题中要求的不同的陈述。