2010-10-01 39 views
0

我正在使用Facebook-c-sharp將照片上傳到Facebook。此代碼工作正常,但對於Facebook的新帳戶此代碼似乎有問題。我認爲這可能與Facebook的新隱私政策有關,而且上述代碼的作者已經停止了新版本的發佈。 這個問題似乎與創建相冊有關。用FB的舊帳戶,專輯被創建並且照片上傳得當。對於新帳戶(最近創建的,大約20天之前),相冊會被創建,但是當Facebook返回XML響應時,我會在嘗試反序列化XML時遇到XMLException。在Facebook反應中反序列化XML例外新帳戶

舊帳戶的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文件進行了比較,看到援助在生成的cs中聲明爲String,並在我的文件中聲明爲long。

回答

0

我明白了。如上所述,下劃線導致了這個問題。就我而言,我沒有檢查過這件事,這真是很愚蠢。在C#代碼中,援助聲明爲long。由於具有下劃線的字符串不能被反序列化爲long,所以我得到異常。我將Facebook的xml響應複製到xml文件中,然後執行xsd Facebook.xml和xsd Facebook.xsd來獲取Facebook.cs。我將生成的cs文件與我所用的cs文件進行了比較,看到援助在生成的cs中聲明爲String,並在我的文件中聲明爲long。

0

雖然這實際上並沒有直接解決您的問題,但我認爲這裏面臨的更大問題是您使用的Facebook庫過舊而無法維護。我強烈建議切換到支持OAuth,Graph API和Rest API的新庫。這是我創建並推薦的:http://facebooksdk.codeplex.com

+0

肯定會看看那個。謝謝 – user281693 2010-10-05 09:06:59