【发布时间】:2019-11-29 03:16:04
【问题描述】:
我的客户将正文中的 json 数据发布到我的 API,是否有一种简单的方法可以从 HttpContext.Request.Body 获取 abc 节点的值(包括 {} 以及)作为 JSON 字符串?最重要的是我需要保留所有原始空格或缩进(如果有)。
P.S abc 始终是第一个节点,而def 是最后一个节点。
谢谢
{
"abc": {
....
},
"def":"..."
}
【问题讨论】:
-
嗨,明!在 C# 中使用 JSON 时,Newtonsoft 是您最好的朋友。 newtonsoft.com/json
-
您可以使用 Newtonsoft 的
JsonTextReader来定位元素的开始和结束索引。从那里你可以从原始 JSON 中得到一个子字符串。 -
JsonTextReader未报告其在底层Stream中的位置,请参阅How to get detailed position information from JsonTextReader 的讨论线程,该线程未得到答复。您可以通过记录abs节点的IJsonLineInfo然后重新读取文件以获取空白来获得所需的内容;参见例如Newtonsoft.Json - Getting corresponding line numbers of deserialized objects from JSON for better error handling. -
@dbc 以这两个JSON为例,
{ "abc" :"def"}和{ "abc" :"def"}abc属性的LinePosition是:的位置,但不知道是否在abc前面有 5 个空格,后面有 1 个空格,反之亦然。 -
@Ming -
JsonTextReader没有提供您想要的信息。但是,对于"abc"属性本身的JsonTextReader的IJsonLineInfo,以及在阅读器位于}的值"abc"的结束标记}时,您可能有通过手动解析加载到string中的文件内容来提取格式化 JSON 的足够信息。