2016-12-04 106 views
3

考虑我有以下JSON:动态JObject - 解析无效的JSON

{ "version": "1.0" } 

我可以把它解析动态JObject及用途:

dynamic result = JObject.Parse(myJson); 
string verison = result.Version; //works <3 

但服务器返回以下JSON

{ { "version": "1.0" } } 

这个json被newtonsoft视为有效,但不能访问版本:

dynamic result = JObject.Parse(myJson); 
string verison = result.Version; //error 

如何访问Version当onlt动态result是否可用?

+4

{{“version”:“1.0”}}是无效的JSON。 – RamblinRose

+0

嗯,这是我从服务器上得到的。也许我应该手动删除额外的大括号? – pwas

+0

对我来说,Newtonsoft抛出一个异常,解析那个以'{{'开头的JSON。 –

回答

4

{ { "version": "1.0" } }这JSON是考虑newtonsoft

这是不正确的有效的,你将无法解析这一点,并会收到Newtonsoft.Json.JsonReaderException类型的异常(有:无效的属性标识符字符:{路径 '',第1行,位置2)


无效JSON:

{ { "version": "1.0" } } 

有效的JSON:

{ "version": "1.0" } 

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

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

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

dynamic result = JObject.Parse(myJson); 
string version = result.version; 

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


另外请注意,为你提供你必须使用小写versionresult.version的JSON。动态属性名称必须与完全匹配 JSON中的一个

-1

我觉得你在“版本”中的资本“V”的麻烦。应该是“result.version”

+0

@ColinM哦认真吗? http://c2n.me/3F7j5Cu.png – Nigrimmist

+0

阅读他问题的第一部分,他指出'result.Version'对于有效的JSON很有效。 – ColinM

+0

它可能只是一个错字 – Nigrimmist