Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为新帐户反序列化Facebook响应中的XML异常_C#_Xml_Facebook_Xml Deserialization - Fatal编程技术网

C# 为新帐户反序列化Facebook响应中的XML异常

C# 为新帐户反序列化Facebook响应中的XML异常,c#,xml,facebook,xml-deserialization,C#,Xml,Facebook,Xml Deserialization,我正在使用将照片上传到Facebook。此代码运行良好,但对于Facebook的新帐户,此代码似乎有问题。我认为这可能与Facebook的新隐私政策有关,而且上述代码的作者已经停止了开发新版本的工作。 问题似乎在于制作相册。使用FB的旧帐户,可以创建相册并正确上传照片。对于最近创建的新帐户,大约20天前,相册被创建,但是当Facebook返回XML响应时,当我尝试反序列化XML时,会抛出一个XMLException 旧帐户的XML响应如下所示 <?xml version="1.0"

我正在使用将照片上传到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 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>
正如您所看到的,Facebook对旧帐户和新帐户的XML响应是相似的。但对于新帐户,反序列化仍然失败。为什么会这样?我能在这两个xml文件中找到的唯一区别是在第二个xml文件的albumid中存在下划线。但据我所知,下划线是有效的xml,解析时应该不会有问题,对吗?有人能告诉我为什么会出现这个错误吗

编辑:


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

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

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

一定会看到这一点。谢谢
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)