2013-09-25 115 views
7

JObject.Parse(jsonString)对布尔数据造成问题。例如JSON的是:Json.Net布尔分析问题

{ 
    "BoolParam": true 
} 

我用下面的代码来解析:

JObject data = JObject.Parse(str1); 
foreach (var x in data) 
{ 
    string name = x.Key; 
    Console.Write(name + " ("); 
    JToken value = x.Value; 
    Console.Write(value.Type + ")\n"); 
    Console.WriteLine(value); 
} 

此打印出来的值为: BoolParam(布尔型):

的情况下灵敏度的原因因为我保存了这个json以备后用。保存的JSON看起来像

{ 
    "BoolParam": True 
} 

然而,当我后来用它,在JObject.Parse(STR)抛出错误无效JSON:在解析值意外字符遇到:T.路径“BoolParam”,2号线,位置15.

如果我将案例从“True”更改为“true”,它可以工作。我不想在保存时添加这个黑客来改变情况,但有没有更好的方法来处理这种情况。

回答

5

我不想在保存时添加此hack来更改案例,但是有 有更好的方法来处理这种情况。

不,您必须在保存时生成有效的JSON,如果您希望能够使用JSON序列化程序(如Newtonsoft JSON)进行反序列化。所以修正你的储蓄路线是去这里的正确方法。

+0

我知道我必须保存一个有效的json。引起问题的事情是当我解析我得到的值为“真”,但有效的JSON字符串预计“真”。所以想知道有没有办法解析它为“true” – surya

+1

@surya如果你的JSON包含'True',那么它是无效的JSON;就这么简单。 '真'标记必须全部小写。请参阅[JSON规范]的第2.1节(http://www.ietf.org/rfc/rfc4627.txt?number=4627)。正如Darin所说,如果您希望解析器能够正确读取它,您需要修复保存JSON的方式。 –

+1

我添加了修复程序,但我想我以前没有解释..它不是我谁将布尔值更改为“True”,但Json.net分析器。具体来说,此行为布尔值返回“True”:JToken value = x.Value; string val =(value.ToString()); json是{“Bool”:“true”} – surya