如何在 C# 中将 JSON 数据序列化为 XML

Posted

技术标签:

【中文标题】如何在 C# 中将 JSON 数据序列化为 XML【英文标题】:How to serialize JSON data in to XML in C# 【发布时间】:2021-09-09 05:11:16 【问题描述】:

我有一个如下的 JSON:


"method": "abc",
"version": "1.0.1",
"login": "123456",
"password": "abc123",
"referenceNumber": "1258",
"amount": 1.00,
"routingNumber": "145879",
"accountNumber": "145879",
"name": "abc as",
"authorizationID": "14789",
"savings": true,
"address1": "noida",
"city": "delhi",
"state": "ab",
"zip": "578945",
"phone": "1234567890",
"email": "abc@test.com",
"test": true

我希望它把它转换成 XML,为此我写了以下代码,这里的 MLPayment 是 JSON:

    XmlSerializer xsSubmit = new XmlSerializer(typeof(MLPayment));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");
                String Body = null;
                //XmlDocument dox = new XmlDocument();
                using (StringWriter stringWriter = new StringWriter())
                        
                    xsSubmit.Serialize(stringWriter, mLPayment, ns);
                    Body = stringWriter.ToString();
                
    第一个问题,我在双引号中获取整个 xml,表示字符串形式 第二期,在正文中我收到了\n\r,回复如下

"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<ACH>\r\n <Method>Debit</Method>\r\n <Version>1</Version>\r\n <Login>9</Login>\r\n <Password>uadwaadwadwu</Password>\r\n <ReferenceNumber>123456</ReferenceNumber>\r\n <Amount>1.00</Amount>\r\n <RoutingNumber>12</RoutingNumber>\r\n <AccountNumber>123456</AccountNumber>\r\n <Name>Joe Blow </Name>\r\n <AuthorizationID>123456</AuthorizationID>\r\n <Savings>true</Savings>\r\n <Address1>SUITE 230adw</Address1>\r\n <City>abc</City>\r\n <State>AZ</State>\r\n <Zip>8504445</Zip>\r\n <Phone>1234567890</Phone>\r\n <Email>test@abc.com</Email>\r\n <Test>true</Test>\r\n</ACH>"

为了解决第二个问题,我替换了\n\r

String cleanedReturnedValue = Body.Replace("\r", "").Replace("\n", "");
String cR = System.Text.RegularExpressions.Regex.Unescape(cleanedReturnedValue);

之后的输出是:

"<?xml version=\"1.0\" encoding=\"utf-16\"?><ACH> <Method>Debit</Method> <Version>1</Version> <Login>9</Login> <Password>uadwaadwadwu</Password> <ReferenceNumber>123456</ReferenceNumber> <Amount>1.00</Amount> <RoutingNumber>12</RoutingNumber> <AccountNumber>123456</AccountNumber> <Name>Joe Blow </Name> <AuthorizationID>123456</AuthorizationID> <Savings>true</Savings> <Address1>SUITE 230adw</Address1> <City>abc</City> <State>AZ</State> <Zip>8504445</Zip> <Phone>1234567890</Phone> <Email>test@abc.com</Email> <Test>true</Test></ACH>"

第一个问题仍然存在,

    如何获取准确的 xml 数据而不是字符串 如何从<?xml version=\"1.0\" encoding=\"utf-16\"?> 中删除斜线

【问题讨论】:

【参考方案1】:

你快到了。

只需使用 LINQ to XML,然后将您的字符串加载到 XDocument 中。

c#

void Main()

    XDocument xdoc = XDocument.Parse("<?xml version=\"1.0\" encoding=\"utf-16\"?><ACH>  <Method>Debit</Method>  <Version>1</Version>  <Login>9</Login>  <Password>uadwaadwadwu</Password>  <ReferenceNumber>123456</ReferenceNumber>  <Amount>1.00</Amount>  <RoutingNumber>12</RoutingNumber>  <AccountNumber>123456</AccountNumber>  <Name>Joe Blow </Name>  <AuthorizationID>123456</AuthorizationID>  <Savings>true</Savings>  <Address1>SUITE 230adw</Address1>  <City>abc</City>  <State>AZ</State>  <Zip>8504445</Zip>  <Phone>1234567890</Phone>  <Email>test@abc.com</Email>  <Test>true</Test></ACH>");

【讨论】:

你好 @Yitzhak Khabinsky,它删除了 XML 版本和编码以及开头和结尾的大括号。 响应:Debit19uadwaadwadwu123456 1.0012123456Joe Blow 123456true SUITE 230adwabcAZ85044451234567890test@abc .comtrue @skr, (1) “...它删除了 XML 版本和编码...”。它被称为 XML prolog 声明。 XDocument 数据类型不会删除 XML 序言。你只是没有看到它。检查xdoc.Declaration 属性。 (2) “……花括号……”。试试xdoc.ToString()【参考方案2】:

您可以使用 Newtonsoft.json 包将 json 序列化为 xml,反之亦然。以下方法将 Json 转换为 XML。

XNode node = JsonConvert.DeserializeXNode(json, "Root");

https://www.c-sharpcorner.com/blogs/how-to-convert-json-into-xml-or-xml-into-json

https://www.newtonsoft.com/json/help/html/ConvertJsonToXml.htm

【讨论】:

以上是关于如何在 C# 中将 JSON 数据序列化为 XML的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 JSON 数组反序列化为对象

如何在 Jquery 中将 MVC 表单序列化为 JSON

如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?

在 C# 中序列化为 JSON 并在 TS 中反序列化

将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

C#使用Json