C# 在C中使用特殊字符转换为Json的XML#
我正在尝试将带有特殊字符(制表符)的XML转换为以下XML的Json:C# 在C中使用特殊字符转换为Json的XML#,c#,json,xml,json.net,C#,Json,Xml,Json.net,我正在尝试将带有特殊字符(制表符)的XML转换为以下XML的Json: <Request> <HEADER> <uniqueID>2019111855545921230</uniqueID> </HEADER> <DETAIL> <cmnmGrp> <coNm>IS XYZ INC.</coNm> <embossedNm>ANNA ST UAR
<Request>
<HEADER>
<uniqueID>2019111855545921230</uniqueID>
</HEADER>
<DETAIL>
<cmnmGrp>
<coNm>IS XYZ INC.</coNm>
<embossedNm>ANNA ST UART</embossedNm>
<cMNm>ST UART/ANNA K</cMNm>
<cmfirstNm>ANNA</cmfirstNm>
<cmmiddleNm>K</cmmiddleNm>
<cm2NdLastNm>ST UART</cm2NdLastNm>
</cmnmGrp>
</DETAIL>
</Request>
上面的响应包含特殊字符。如何删除选项卡空间的\t。我正在使用以下代码进行xml到Json的转换:
var xml = @"Input xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None);
我期望最终Json输出如下:
{
"Request": {
"HEADER": { "uniqueID": "2019111855545921230" },
"DETAIL": {
"cmnmGrp": {
"coNm": "IS XYZ INC.",
"embossedNm": "ANNA ST UART",
"cMNm": "ST UART/ANNA K",
"cmfirstNm": "ANNA",
"cmmiddleNm": "K",
"cm2NdLastNm": "ST UART"
}
}
}
}
有人能帮忙吗。
谢谢。
\t
不仅仅是固定的空格数,它还取决于从行开始的位置以及读卡器设置的最大制表符大小(通常为8)。如果希望它们以JSON格式显示,就像在XML中显示一样,那么在转换为JSON之前,必须以文本格式读取XML文件,并根据选项卡的位置以编程方式将其替换为空格。假设您知道阅读器的最大标签大小:可能是4
下面是两行相同的行,具有相同的“abc\t”值,假设每个选项卡最多有8个空格:
<value>abc </value>
<value>abc </value>
abc
abc
一般来说,保持记录是正确的,尽管它不适合你
JSON规范将选项卡定义为两个字符
\t
,并且您的快照是正确的。如果检索到包含\t
的值,JSON解析器应将其替换为制表符。取决于你需要什么;如果您不介意XML文件中的初始选项卡位置,您可能已经可以了。不要混淆数据和表示
ANNA ST\t\tUART
-是字符串“ANNA ST UART”的JSON表示形式
现在进行JSON解析,您将得到一个不带\t
的字符串
var obj = JObject.Parse(json);
var value = obj["Request"]["DETAIL"]["cmnmGrp"]["embossedNm"];
Console.WriteLine(value); // ANNA ST UART
\t
是JSON如何转义选项卡的。。。我看这里没什么问题。看,你不清楚你想要的最终结果是什么。标签完全移除了吗?在转换XML文档之前修改XML文档可能是最简单的方法,如果您希望选项卡返回(我不明白为什么),可以执行类似于json.Replace(“\\t”,“\t”)代码>请根据您的期望编辑问题,而不是使用注释。但从根本上讲,在JSON中有一个literal选项卡和\t
在所有解析器下都应该是等效的。看见
var obj = JObject.Parse(json);
var value = obj["Request"]["DETAIL"]["cmnmGrp"]["embossedNm"];
Console.WriteLine(value); // ANNA ST UART