Json.Net布尔解析问题

Json.Net布尔解析问题,json,json.net,Json,Json.net,Parse(jsonString)导致布尔数据出现问题。e、 g.json是: { "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 +

Parse(jsonString)导致布尔数据出现问题。e、 g.json是:

{
    "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);
}
这会将值打印为: 布尔内存(布尔):True

在我保存此json以供以后使用时,区分大小写会导致问题。保存的json看起来像

{
    "BoolParam": True
}
但是,当我稍后使用它时,JObject.Parse(str)抛出错误,因为Json无效:解析值时遇到意外字符:T.Path'BoolParam',第2行,位置15

如果我将案例从“True”更改为“True”,它将起作用。我不想添加这个hack来改变保存时的情况,但是有没有更好的方法来处理这种情况

我不想添加这个hack来改变保存时的情况,但是 有更好的方法来处理这种情况


不,如果希望以后能够使用JSON序列化程序(如Newtonsoft JSON)对其进行反序列化,则必须在保存时生成有效的JSON。因此,修复保存路由是正确的方法。

我知道我必须保存一个有效的json。导致问题的原因是,当我解析时,我得到的值为“True”,但有效的Json字符串需要“True”。所以想知道有没有办法将其解析为“true”@surya如果您的JSON包含
true
,那么它就不是有效的JSON;就这么简单。
true
标记必须全部小写。见本手册第2.1节。正如Darin所说,如果希望解析器能够正确读取JSON,则需要修复保存JSON的方式。我添加了修复程序,但我想我之前没有解释。。将布尔值更改为“True”的不是我,而是Json.net解析器。具体来说,这一行为布尔值返回“True”:JToken值=x.值;字符串val=(value.ToString());json是{“Bool”:“true”}这里:
value.ToString()
->这是您的代码,不是吗?这就是将其更改为
True
。Darin,我有完全相同的问题,我没有调用
.ToString()
。您如何解释这一点:?实际上,您的问题在于
控制台.Write()
方法,该方法试图方便地打印
JTokenType.Boolean
值。如果您想在c#中正确地序列化/反序列化json,只需使用
JsonConvert.SerializeObject()
JsonConvert.DeserializeObject()
,它们也会正确地输出布尔值。