动态 JObject - 解析无效的 JSON

pwa*_*was 3 c# json json.net

考虑我有以下 json:

{ "version": "1.0" }
Run Code Online (Sandbox Code Playgroud)

我可以将其解析为动态 JObject 并使用:

dynamic result = JObject.Parse(myJson);
string verison = result.Version; //works <3
Run Code Online (Sandbox Code Playgroud)

但服务器返回以下json

{ { "version": "1.0" } }
Run Code Online (Sandbox Code Playgroud)

newtonsoft 认为此 json 有效,但无法再访问版本:

dynamic result = JObject.Parse(myJson);
string verison = result.Version; //error
Run Code Online (Sandbox Code Playgroud)

Versiononltdynamicresult可用时如何访问?

Jim*_*Jim 5

{ { "version": "1.0" } }newtonsoft 认为该 json 有效

这是不正确的,您将无法解析它,并且会收到类型异常Newtonsoft.Json.JsonReaderException(带有:无效的属性标识符字符:{.Path '',第 1 行,位置 2。)


无效的 JSON:

{ { "version": "1.0" } }
Run Code Online (Sandbox Code Playgroud)

有效的 JSON:

{ "version": "1.0" }
Run Code Online (Sandbox Code Playgroud)

(如果您有服务器控制权,我建议您在服务器上执行必要的步骤以返回有效的 JSON)

但是,在最坏的情况下,您可以通过在解析之前删除第一个字符{和最后一个字符来使这个无效的 JSON 有效。}例如像这样:

 var myJson = json.Substring(1, json.Length - 2);

 dynamic result = JObject.Parse(myJson);
 string version = result.version;
Run Code Online (Sandbox Code Playgroud)

这里json是包含无效 JSON 的原始响应。


另请注意,对于您提供的 JSON,您必须使用小写字母version作为result.version。动态属性名称必须与 JSON 中的名称完全匹配