Newtonsoft JSON反序列化List中的布尔值

时间:2014-04-29 15:51:20

标签: c# json json.net

我使用Newtonsoft Json(http://james.newtonking.com/json)库将一些json反序列化为一个对象,但是在布尔值方面遇到了一些麻烦。请参阅下面的示例。只要您引用Newtonsoft dll(我现在使用的是文档版本为6.0.3.17227的最新版本),该示例应该在LinqPad中运行。问题是反序列化到UpdateLocationsRequest对象。

感谢任何帮助。

void Main()
{
    string json1 = "{\"token\":\"5b2a38c8-c211-481e-aa75-7d52fff6eb2f\",\"share\":true}";
    string json2 = "{\"token\":\"5b2a38c8-c211-481e-aa75-7d52fff6eb2f\",\"locationList\":[{\"desc\":\"This is a test\",\"name\":\"Andrew 3\",\"deviceLocationId\":\"a8d2bfae-4493-41cd-ae1e-ea0da66da0cf\",\"locType\":1,\"lon\":-80.27543,\"lat\":43.42618,\"share\":true}]}";

    TestClass req1 = JsonConvert.DeserializeObject<TestClass>(json1);
    UpdateLocationsRequest req2 = JsonConvert.DeserializeObject<UpdateLocationsRequest>(json2);

    json1.Dump("json1");
    req1.Dump("Boolean ok here");
    json2.Dump("json2");
    req2.Dump("Boolean not ok here.  Why not?");

}

// Define other methods and classes here
public class UpdateLocationsRequest
{
   public string token { get; set; }
   public List<LocationJson> locationList { get; set; }
}

public class LocationJson
{
   public string deviceLocationId { get; set; }
   public string name { get; set; }
   public string desc { get; set; }
   public int locType { get; set; }
   public float lat { get; set; }
   public float lon { get; set; }
   public bool show { get; set; }
}

public class TestClass {
    public string token {get; set;}
    public bool share {get; set;}
}

2 个答案:

答案 0 :(得分:1)

您的json bool值为share,但在您的班级中为show。调整一个或另一个以使它们匹配,你应该好好去

答案 1 :(得分:1)

我找到了你的问题。您LocationJson class有一个名为show的布尔属性,而您的json2字符串具有属性share。 show永远不会更新。所有其他值都会更新。

添加断点并进入程序并查看正在发生的事情总是一件好事。

祝你好运。