我在使用JSON.NET库反序列化从Facebook返回的数据时遇到了一些麻烦。反序列化JSON有时是数组,有时是对象
的JSON从只是一个简单的墙后返回的样子:
{
"attachment":{"description":""},
"permalink":"http://www.facebook.com/permalink.php?story_fbid=123456789"
}
的JSON返回相片看起来像:
"attachment":{
"media":[
{
"href":"http://www.facebook.com/photo.php?fbid=12345",
"alt":"",
"type":"photo",
"src":"http://photos-b.ak.fbcdn.net/hphotos-ak-ash1/12345_s.jpg",
"photo":{"aid":"1234","pid":"1234","fbid":"1234","owner":"1234","index":"12","width":"720","height":"482"}}
],
一切的伟大工程,我没有问题。现在我遇到一个简单的墙后,从移动客户端与以下JSON,和反序列化失败,现在这一个单一的差价:
"attachment":
{
"media":{},
"name":"",
"caption":"",
"description":"",
"properties":{},
"icon":"http://www.facebook.com/images/icons/mobile_app.gif",
"fb_object_type":""
},
"permalink":"http://www.facebook.com/1234"
这里是我反序列化的类:
public class FacebookAttachment
{
public string Name { get; set; }
public string Description { get; set; }
public string Href { get; set; }
public FacebookPostType Fb_Object_Type { get; set; }
public string Fb_Object_Id { get; set; }
[JsonConverter(typeof(FacebookMediaJsonConverter))]
public List<FacebookMedia> { get; set; }
public string Permalink { get; set; }
}
没有使用FacebookMediaJsonConverter,我得到一个错误:无法将JSON对象反序列化到类型'System.Collections.Generic.List`1 [FacebookMedia]'中。 这是有道理的,因为在JSON中,媒体不是一个集合。
我发现这个职位描述了一个类似的问题,所以我已经试图沿着这条路走下去:Deserialize JSON, sometimes value is an array, sometimes "" (blank string)
我的转换器看起来像:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartArray)
return serializer.Deserialize<List<FacebookMedia>>(reader);
else
return null;
}
除了我的正常工作,现在得到一个新的异常:
里面JsonSerializerInternalReader.cs,CreateValueInternal():意外令牌反序列化对象:属性名
reader.Value的值是“永久链接”。我可以清楚地看到在开关中没有JsonToken.PropertyName的情况。
有什么我需要在我的转换器有不同的做法吗?谢谢你的帮助。
-1通过第三方库推荐使用框架的内部验证部分,并链接到代码示例? – jonezy 2011-03-07 21:06:09
似乎非常不寻常。 – jonezy 2011-03-07 21:06:30
我不确定-1从哪里来。我很欣赏这种回应。我怀疑它可能来自它是一个小问题的相当重量级的解决方案(很可能是由于我自己滥用JSON.NET)。话虽如此,我将尝试尝试Systme.Runtime.Serialization方法,看看它是否最终能够更好地工作。感谢您的链接。 – mfanto 2011-03-07 21:37:47