0

我正在使用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# 代码中,援助声明为 long。由于带下划线的字符串不能反序列化到 long 我得到了异常。我将来自 Facebook 的 xml 响应复制到一个 xml 文件中,然后执行 xsd Facebook.xml 和 xsd Facebook.xsd 以获取 Facebook.cs。我将生成的cs文件与我拥有的文件进行了比较,发现在生成的cs中将aid声明为String,在我的文件中声明为long。

4

2 回答 2

0

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

于 2010-10-05T06:12:05.207 回答
0

我让它工作了。如上所述,下划线导致了问题。我没有检查那是很愚蠢的。在 C# 代码中,援助声明为 long。由于带下划线的字符串不能反序列化到 long 我得到了异常。我将来自 Facebook 的 xml 响应复制到一个 xml 文件中,然后执行 xsd Facebook.xml 和 xsd Facebook.xsd 以获取 Facebook.cs。我将生成的cs文件与我拥有的文件进行了比较,发现在生成的cs中将aid声明为String,在我的文件中声明为long。

于 2010-10-05T17:36:02.590 回答