Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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# XML反序列化<;rss xmlns=''&燃气轮机;出乎意料_C#_Xml_Rss_Deserialization - Fatal编程技术网

C# XML反序列化<;rss xmlns=''&燃气轮机;出乎意料

C# XML反序列化<;rss xmlns=''&燃气轮机;出乎意料,c#,xml,rss,deserialization,C#,Xml,Rss,Deserialization,另一个 我已经查看了许多关于堆栈溢出的其他示例,但还没有找到一个解决方案 错误: There is an error in XML document (1, 41). System.Xml at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.S

另一个

我已经查看了许多关于堆栈溢出的其他示例,但还没有找到一个解决方案

错误:

    There is an error in XML document (1, 41).
System.Xml
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader)
   at CatalogInterface_1_1.MainWindow.cmdConvertToGoogle_Click(Object sender, RoutedEventArgs e) in C:\Users\Jamie.Marshall\Documents\Visual Studio 2015\Projects\CatalogInterface_1_1\CatalogInterface_1_1\MainWindow.xaml.cs:line 239
<rss xmlns=''> was not expected.
这东西快把我累死了,我已经用了好几个小时了


有趣的是,我通常使用的go-to工具是将我的XML和past special复制到VS Studio中,然后查看VS Studio将自动构建的类来反序列化它。在本例中,它与我的代码完全相同。非常混乱

由于utf-16,出现错误。只需从StringReader中读取一行即可跳过该行

         FBCatalog.googleRss dataObject = new FBCatalog.googleRss();
         using (StringReader sReader = new StringReader(xml.InnerXml))
         {
              sReader.ReadLine();
              XmlReader reader = XmlReader.Create(sReader);
              var serializer = new XmlSerializer(typeof(FBCatalog.googleRss), "rss");
          dataObject = (FBCatalog.googleRss)serializer.Deserialize(reader);
          GCatalog.Page page = new GCatalog.Page();
          counter = 0;
          foreach (var ITEM in dataObject.Channel.Items)
               {
                   GCatalog.Item gItem = GCatalog.ConvertToGItem(ITEM);
                   page.Add(gItem);
               }
        }

问题在于名称空间。XML中的
rss
元素位于默认名称空间中,但是
googleRss
上的
XmlRoot
属性的名称空间为
http://base.google.com/ns/1.0

xmlns:g=“…”
的名称空间声明将名称空间绑定到前缀
g
,但在您的问题中的XML片段中没有使用该名称空间

XmlRoot
属性中删除
Namespace
值:

[XmlRoot(ElementName = "rss")]
public partial class googleRss
并从序列化程序构造函数中删除默认名称空间
rss

var serializer = new XmlSerializer(typeof(GCatalog.googleRss));

请参阅以获取演示。

效果非常好。很明显。。。我没有尝试从rss标记中删除名称空间和从序列化程序中删除rss根的组合。我知道第一部分,但为什么是第二部分?为什么为序列化程序声明我的根会出错?@jamiemall你不是在序列化程序中声明根。将
rss
传递给正在设置默认名称空间。这相当于将
NamespaceName=“rss”
添加到
XmlRoot
属性中。
         FBCatalog.googleRss dataObject = new FBCatalog.googleRss();
         using (StringReader sReader = new StringReader(xml.InnerXml))
         {
              sReader.ReadLine();
              XmlReader reader = XmlReader.Create(sReader);
              var serializer = new XmlSerializer(typeof(FBCatalog.googleRss), "rss");
          dataObject = (FBCatalog.googleRss)serializer.Deserialize(reader);
          GCatalog.Page page = new GCatalog.Page();
          counter = 0;
          foreach (var ITEM in dataObject.Channel.Items)
               {
                   GCatalog.Item gItem = GCatalog.ConvertToGItem(ITEM);
                   page.Add(gItem);
               }
        }
[XmlRoot(ElementName = "rss")]
public partial class googleRss
var serializer = new XmlSerializer(typeof(GCatalog.googleRss));