Десериализовать исключение XML в ответе Facebook для новых учетных записей - PullRequest
0 голосов
/ 01 октября 2010

Я использую Facebook-c-sharp для загрузки фотографий в Facebook.Этот код работает нормально, но для новых учетных записей Facebook этот код, похоже, имеет проблемы.Я подумал, что это как-то связано с новой политикой конфиденциальности Facebook, и, кроме того, авторы вышеуказанного кода перестали работать над новыми выпусками.Кажется, проблема в создании альбомов.Со старой учетной записью FB, альбом создается и фотографии загружаются правильно.Для новой учетной записи (созданной недавно, около 20 дней назад) создается фотоальбом, но когда Facebook возвращает ответ XML, я получаю исключение XMLException при попытке десериализации 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)

Как вы видите, и ответы XML от Facebook для старой и новой учетной записи схожи.Но все же для нового аккаунта десериализация не удалась.Почему это происходит?Единственное отличие, которое я смог найти в обоих xml-файлах, заключалось в наличии «подчеркивания _» в (albumid) во втором XML-файле.Но, насколько я знаю, подчеркивание является действительным xml и не должно быть проблемой парсинга, верно?Может кто-нибудь сказать, почему я получаю эту ошибку.

РЕДАКТИРОВАТЬ:

Я получил это работает.Как уже упоминалось выше, подчеркивание было причиной проблемы.С моей стороны было довольно глупо, что я не проверял это.В коде C # помощь была объявлена ​​как долго.Поскольку строка с подчеркиванием не может быть десериализована слишком долго, я получаю исключение.Я скопировал ответ xml из Facebook в файл xml, затем сделал xsd Facebook.xml и xsd Facebook.xsd, чтобы получить Facebook.cs.Я сравнил сгенерированный файл cs с тем, который у меня есть, и увидел, что aid был объявлен как String в сгенерированном cs и long в моем файле.

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Я получил это работает.Как уже упоминалось выше, подчеркивание было причиной проблемы.С моей стороны было довольно глупо, что я не проверял это.В коде C # помощь была объявлена ​​как долго.Поскольку строка с подчеркиванием не может быть десериализована слишком долго, я получаю исключение.Я скопировал ответ xml из Facebook в файл xml, затем сделал xsd Facebook.xml и xsd Facebook.xsd, чтобы получить Facebook.cs.Я сравнил сгенерированный файл cs с тем, который у меня есть, и увидел, что help объявлена ​​как String в сгенерированном cs и long в моем файле.

0 голосов
/ 05 октября 2010

Хотя это действительно не решает ваш вопрос напрямую, я думаю, что большая проблема здесь в том, что вы используете библиотеку Facebook, которая очень старая и не поддерживается. Я бы настоятельно рекомендовал перейти на новую библиотеку, которая поддерживает OAuth, Graph API и Rest API. Вот тот, который я создал и рекомендую: http://facebooksdk.codeplex.com

...