在新的帐户的Facebook响应中反序列化XML异常

时间:2010-10-01 15:21:29

标签: c# xml facebook xml-deserialization

我正在使用Facebook-c-sharp将照片上传到Facebook。这段代码工作正常,但对于Facebook的新帐户,这段代码似乎有问题。我认为它可能与Facebook的新隐私政策有关,而且上述代码的作者已停止处理新版本。 问题似乎在于创建专辑。使用FB的旧帐户,可以创建相册并正确上传照片。对于新帐户(最近创建,大约20天后),相册会被创建,但是当Facebook返回XML响应时,当我尝试反序列化XML时,我会抛出一个XMLException。

旧帐户的XML响应低于

    <?xml version="1.0" encoding="UTF-8"?>
<photos_createAlbum_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
  <aid>2470234845268380151</aid>
  <owner>number</owner>
  <name>AlbumName</name>
  <created>number</created>
  <modified>number</modified>
  <description>description</description>
  <location>location</location>
  <link>url of the album created</link>
  <size>0</size>
  <visible>privacy setting</visible>
  <modified_major>number</modified_major>
  <object_id>number</object_id>
</photos_createAlbum_response>

新帐户的xml响应低于

    <?xml version="1.0" encoding="UTF-8"?>
<photos_createAlbum_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
  <aid>100001291780378_24994</aid>
  <owner>number</owner>
  <name>AlbumName</name>
  <created>number</created>
  <modified>number</modified>
  <description>description</description>
  <location>location</location>
  <link>url of the album created</link>
  <size>0</size>
  <visible>privacy setting</visible>
  <modified_major>number</modified_major>
  <object_id>number</object_id>
</photos_createAlbum_response>

我得到的XMLException如下(再次:这只发生在新帐户上。旧帐户反序列化工作正常)

type=Mono.Facebook.XMLException

message=Failed parsing XML

stack=
   at Mono.Facebook.Util.GetResponse[T](String method_name, FacebookParam[] parameters)
   at Mono.Facebook.FacebookSession.CreateAlbum(String name, String description, String location)
   at Facebook.PostToFacebook(List`1 photos, String apiKey, String apiSecret, String authToken)



type=System.InvalidOperationException

message=There is an error in XML document (0, 0).

stack=
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)
   at Mono.Facebook.Util.GetResponse[T](String method_name, FacebookParam[] parameters)

正如您所看到的,Facebook对旧帐户和新帐户的XML响应都是相似的。但仍然为新帐户反序列化失败。为什么会这样?我在两个xml文件中找到的唯一区别是第二个XML文件中(albumid)中存在“下划线_”。但据我所知,下划线是有效的xml,不应该是一个解析正确的问题?有人可以告诉我为什么会收到此错误。

编辑:

我得到了它的工作。如上所述,下划线导致了问题。对我而言,我没有检查过这是非常愚蠢的。在C#代码中,援助声明为长。由于带有下划线的字符串无法反序列化很长时间我得到了异常。我将来自Facebook的xml响应复制到xml文件中,然后使用xsd Facebook.xml和xsd Facebook.xsd来获取Facebook.cs。我将生成的cs文件与我拥有的文件进行了比较,并看到援助在生成的cs中声明为String,在我的文件中声明为long。

2 个答案:

答案 0 :(得分:0)

虽然这确实没有直接解决你的问题,但我认为这里更大的问题是你使用的是一个非常陈旧而且没有维护的Facebook库。我强烈建议切换到支持OAuth,Graph API和Rest API的新库。以下是我创建并推荐的内容:http://facebooksdk.codeplex.com

答案 1 :(得分:0)

我得到了它的工作。如上所述,下划线导致了问题。对我而言,我没有检查过这是非常愚蠢的。在C#代码中,援助声明为长。由于带有下划线的字符串无法反序列化很长时间我得到了异常。我将来自Facebook的xml响应复制到xml文件中,然后使用xsd Facebook.xml和xsd Facebook.xsd来获取Facebook.cs。我将生成的cs文件与我拥有的文件进行了比较,发现援助在生成的cs中声明为String,在我的文件中声明为。