4
我试图使用JSON.NET库解析出oodle.com api提要中的数据。响应JSON字符串反序列化的一部分,具有以下“位置”的结构:无法将JSON数组反序列化为foo类型
"location":[],
我试图反序列化:
"location":{
"address":"123 foo Street",
"zip":"94102",
"citycode":"usa:ca:sanfrancisco:downtown",
"name":"San Francisco (Downtown)",
"state":"CA",
"country":"USA",
"latitude":"37.7878",
"longitude":"-122.4101"},
声明为一个空数组的位置,但是我见过实例在一类类型的位置数据中。当位置具有有效数据时,这种方法非常完美,但当位置表示为空数组时,这种方法效果不佳。我尝试添加属性(NullValueHandling &必需),如果数据确实是一个空数组,则将位置实例设置为null,但我认为这些属性仅用于序列化。如果数组是空的,我得到一个例外
Cannot deserialize JSON array into type 'LocationData'
有没有办法告诉解串器不抱怨,使定位对象为null如果数组反序列化失败? 谢谢!
[JsonProperty(NullValueHandling = NullValueHandling.Ignore,Required=Required.AllowNull)]
public LocationData location{get;set;}
...
public class LocationData
{
public string zip { get; set; }
public string address { get; set; }
public string citycode { get; set; }
public string name { get; set; }
public string state { get; set; }
public string country { get; set; }
public decimal latitude { get; set; }
public decimal longitude { get; set; }
}
有在你的第一个例子中,没有数组,但有一个在你的第二个空单...确实JSON。 NET关心“位置”数据是什么(单个对象或对象数组)? – 2010-09-11 17:23:25
好点。我只注意到了这一点。我会联系数据提供者(oodle.com dev api)尝试获得解释。这种情况下的数据类型似乎不同于天气是有数据还是为空。有没有可以包含两者的数据结构?是否有一个技巧告诉JSON.NET将它序列化为LocationData(如果它有数据,否则只要将NULL置于空数组中)? – Ash 2010-09-12 14:59:25
问题变成了PHP的JSON构造。 位置对象被定义为散列$ somehash = array();并填充为: if($ foo) {location} {'foo'} = $ foo; } 在PHP json_encode转换$ somehash到somehash []即使$ somehash旨在被用作散列对象而不是数组... 因此溶液没有实例变量$ somehash =阵列( );直到你有第一个项目填充。这会将json对象序列化为NULL而不是数组。 – Ash 2010-09-14 18:28:44