c# - 如何在 C# 中将 JSON 数据序列化为 XML
问题描述
我有一个如下的 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\"?>
解决方案
你快到了。
只需使用 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>");
}
推荐阅读
- java - 如何在导出的 jar 文件中播放 .wav 文件?
- postgresql - 错误消息:控制到达程序结束而没有返回
- c++ - 当 pthread 链接到共享库而不是主可执行文件时,C++ 线程报告为禁用
- firebase - Firestore:如何使用 Dart 将一个集合的多个子集合写入 Firestore
- c++ - 是否可以从多个函数中收集参数?
- google-sheets - 谷歌表格:零不是零
- arduino - 附加中断频率arduino
- buddypress - Buddypress - 限制活动流上的博客摘录
- android - Android获取包含至少一个媒体文件(如照片/视频)的所有文件夹
- flutter - 我在 flutter 中遇到 findAncestorStateOfType 错误。我该怎么办?我被困在这里