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

PowerShell调用JsonConvert.SerializeXmlNode转XML为JSON报方法不存在

问题根因

这个报错和SerializeXmlNode方法是否废弃没有关系,核心是你导入的newtonsoft.json模块有问题:PowerShell Gallery上流传的同名第三方模块大多是个人打包的,要么带的Newtonsoft.Json程序集版本过旧,要么为了压缩体积裁剪掉了XML序列化相关的方法;另外如果当前PowerShell会话已经加载了系统/其他模块自带的低版本Newtonsoft.Json,也会因为程序集版本优先级问题,导致调用不到目标方法。

方案1:正确加载完整版Newtonsoft.Json调用SerializeXmlNode方法

不要依赖第三方打包的模块,手动加载官方发布的完整版Newtonsoft.Json.dll即可正常调用方法,参考代码:

# 替换为你本地存放官方完整版Newtonsoft.Json.dll的实际路径
Add-Type -Path "D:\libs\Newtonsoft.Json.dll"

$filename = "E:\Udemy\Complete Guide to XML For Microsoft Developers\Lecture 5\XMLClass_Downloads_2021_03_28\IntroSamples\Flight01.xml"
[xml]$xmlDoc = [System.IO.File]::ReadAllText($filename)

# 第二个参数是序列化配置枚举,填0就是默认格式,也可以按需配置是否缩进、忽略XML属性等
$jsonText = [Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xmlDoc, 0)

# 输出转换结果验证
$jsonText

执行时注意以下事项:

  • 加载dll前请新开一个PowerShell会话执行,避免之前缓存的旧版本程序集导致报错
  • 可以执行[Newtonsoft.Json.JsonConvert].Assembly.FullName验证当前加载的程序集版本,确认版本正常后再调用方法
  • 读取XML文件不要用Get-Content,该cmdlet默认按行读取、自动识别编码的逻辑很容易导致XML加载乱码、格式错误,用[IO.File]::ReadAllText()读取稳定性高很多
方案2:无第三方依赖的原生转换方案

如果不想额外引入Newtonsoft.Json依赖,可以直接用.NET内置的API完成XML到JSON的转换,不需要安装任何模块:

$filename = "E:\Udemy\Complete Guide to XML For Microsoft Developers\Lecture 5\XMLClass_Downloads_2021_03_28\IntroSamples\Flight01.xml"
[xml]$xmlDoc = [System.IO.File]::ReadAllText($filename)

# 先将XML反序列化为.NET对象,再序列化为JSON
$xmlReader = New-Object System.Xml.XmlNodeReader($xmlDoc)
$xmlSerializer = New-Object System.Xml.Serialization.XmlSerializer($xmlDoc.GetType())
$dotnetObj = $xmlSerializer.Deserialize($xmlReader)
$jsonText = [System.Text.Json.JsonSerializer]::Serialize($dotnetObj, [System.Text.Json.JsonSerializerOptions]@{
    WriteIndented = $true
})

# 输出转换结果验证
$jsonText

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:42:43