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 ファイルで見つけた唯一の違いは、2 番目の XML ファイルの (albumid) に「アンダースコア _」が存在することでした。しかし、私が知る限り、アンダースコアは有効なxmlであり、解析に問題はないはずですか? なぜこのエラーが発生するのか誰か教えてください。

編集:

私はそれを働かせました。前述のように、アンダースコアが問題の原因でした。私がそれをチェックしなかったのは、私の側ではかなりばかげていました。C# コードエイドでは long と宣言されていました。アンダースコアを含む文字列は long に逆シリアル化できないため、例外が発生していました。Facebook からの xml 応答を xml ファイルにコピーし、xsd Facebook.xml と xsd Facebook.xsd を実行して Facebook.cs を取得しました。生成されたcsファイルを私が持っているものと比較したところ、援助は生成されたcsではStringとして宣言され、ファイルではlongとして宣言されていることがわかりました。

4

2 に答える 2

0

これは実際にはあなたの質問に直接対処するものではありませんが、ここでのより大きな問題は、非常に古く、保守されていないFacebookライブラリを使用していることだと思います。OAuth、Graph API、RestAPIをサポートする新しいライブラリに切り替えることを強くお勧めします。これが私が作成したもので、お勧めします: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 では支援が String として宣言され、ファイルでは long として宣言されていることがわかりました。

于 2010-10-05T17:36:02.590 に答える