C# 在C中使用特殊字符转换为Json的XML#

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

我正在尝试将带有特殊字符(制表符)的XML转换为以下XML的Json:

<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