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として宣言されていることがわかりました。