我使用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;}
}
答案 0 :(得分:1)
您的json bool值为share
,但在您的班级中为show
。调整一个或另一个以使它们匹配,你应该好好去
答案 1 :(得分:1)
我找到了你的问题。您LocationJson class
有一个名为show
的布尔属性,而您的json2字符串具有属性share
。 show永远不会更新。所有其他值都会更新。
添加断点并进入程序并查看正在发生的事情总是一件好事。
祝你好运。