C# 在.Net Core 3.1 Web Api项目中使用System.Text.Json将XmlDocument序列化为Json

C# 在.Net Core 3.1 Web Api项目中使用System.Text.Json将XmlDocument序列化为Json,c#,json.net,asp.net-core-3.1,xmldocument,system.text.json,C#,Json.net,Asp.net Core 3.1,Xmldocument,System.text.json,我正在一个.NETCore3.1WebAPI项目中从Newtonsoft.Json切换到System.Text.Json。该项目是一个遗留的.net核心web api项目,有数百个客户端。一些控制器端点返回XmlDocuments。使用Newtonsoft.Json将XmlDocuments序列化为Json运行良好,并给出了预期的结果。不幸的是,当切换到System.Text.Json时,序列化的效果并不相同 示例 使用制度; 使用System.Xml public class Program

我正在一个.NETCore3.1WebAPI项目中从Newtonsoft.Json切换到System.Text.Json。该项目是一个遗留的.net核心web api项目,有数百个客户端。一些控制器端点返回XmlDocuments。使用Newtonsoft.Json将XmlDocuments序列化为Json运行良好,并给出了预期的结果。不幸的是,当切换到System.Text.Json时,序列化的效果并不相同

示例 使用制度; 使用System.Xml

public class Program
{
    public static void Main()
    {
        var xml = @"<root><items><item id=""1"">item 1</item><item id=""2"">item 2</item></items></root>";
        var xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xml);        
        Console.WriteLine($"Xml: {xml}");
        Console.WriteLine($"XmlDocument xml: {xmlDoc.ToString()}");
        
        var serializedXml = System.Text.Json.JsonSerializer.Serialize(xmlDoc);
        Console.WriteLine($"Serialized xml using System.Text.Json: {serializedXml}");
        
        serializedXml = Newtonsoft.Json.JsonConvert.SerializeObject(xmlDoc);
        Console.WriteLine($"Serialized xml using Newtonsoft.Json: {serializedXml}");
    }
}
公共类程序
{
公共静态void Main()
{
变量xml=@“项目1项目2”;
var xmlDoc=新的XmlDocument();
LoadXml(xml);
WriteLine($“Xml:{Xml}”);
WriteLine($“XmlDocument xml:{xmlDoc.ToString()}”);
var serializedXml=System.Text.Json.JsonSerializer.Serialize(xmlDoc);
WriteLine($“使用System.Text.Json序列化的xml:{serializedXml}”);
serializedXml=Newtonsoft.Json.JsonConvert.SerializeObject(xmlDoc);
WriteLine($“使用Newtonsoft.Json序列化的xml:{serializedXml}”);
}
}

结果

Xml: <root><items><item id="1">item 1</item><item id="2">item 2</item></items></root>
XmlDocument xml: System.Xml.XmlDocument
Serialized xml using System.Text.Json: [[[[[]],[[]]]]]
Serialized xml using Newtonsoft.Json: {"root":{"items":{"item":[{"@id":"1","#text":"item 1"}, 
{"@id":"2","#text":"item 2"}]}}}
Xml:item 1项目2
XmlDocument xml:System.xml.XmlDocument
使用System.Text.Json序列化的xml:[[[]],[[[]]]]]
使用Newtonsoft.Json{“root”:{“items”:{“item”:[{“@id”:“1”,“#text”:“item 1”)序列化xml,
{“@id”:“2”,“#text”:“第2项”}]}
是否有任何方法可以使用System.Text.Json自动序列化.net Core 3.1 web api中的XmlDocuments,除了:

  • 使用Newtsoft.Json序列化程序作为整个项目的标准
  • 创建自定义XmlDocument TextOutputFormatter并将其添加到输出格式化程序

  • 在没有Serialize()函数的正确参数的情况下,如何使其运行(请检查此处:)我发现JsonSerializer类下没有接受单个参数的Serialize()函数。Json.NET具有执行XML到Json转换的函数。当从XML转换为JSON时,它具有识别数组、识别数字、识别布尔值等逻辑,因为XML没有明确的这些结构。
    System.Text.Json
    @IanPreglo public static string Serialize(TValue-value,System.Text.Json.Json-serializeroptions-options=default)中没有等效项;()