C#XmlSerializer-XML文档中存在错误(0,0)<;nodename>;不期而至

C#XmlSerializer-XML文档中存在错误(0,0)<;nodename>;不期而至,c#,xml,C#,Xml,我以前对这个问题发表过不同的看法,但毫无乐趣。我希望重构后的问题会有所帮助 本质上,我将XML字符串加载到XDocument中,然后使用XDocument.GetReader()返回XmlReader。在此,我将使用XmlSerializer对以下XML进行反序列化: <?xml version='1.0' encoding='UTF-8'?> <osgb:FeatureCollection xmlns:osgb='http://www.ordnancesurvey.co.uk

我以前对这个问题发表过不同的看法,但毫无乐趣。我希望重构后的问题会有所帮助

本质上,我将XML字符串加载到XDocument中,然后使用XDocument.GetReader()返回XmlReader。在此,我将使用XmlSerializer对以下XML进行反序列化:

<?xml version='1.0' encoding='UTF-8'?>
<osgb:FeatureCollection
xmlns:osgb='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb'
xmlns:gml='http://www.opengis.net/gml'
xmlns:xlink='http://www.w3.org/1999/xlink'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb http://www.ordnancesurvey.co.uk/xml/schema/v7/OSDNFFeatures.xsd'
fid='GDS-58116-1'>
  <gml:description>OS</gml:description>
  <gml:boundedBy>
    <gml:null>unknown</gml:null>
  </gml:boundedBy>
  <osgb:queryTime>2009-07-30T02:35:17</osgb:queryTime>
  <osgb:queryExtent>
    <osgb:Rectangle srsName='osgb:BNG'>
      <gml:coordinates>291000.000,92000.000 293000.000,94000.000</gml:coordinates>
    </osgb:Rectangle>
  </osgb:queryExtent>  
</osgb:FeatureCollection>
内部异常显示:
不是预期的


我看不出有什么问题。我不需要集合上方的根节点,是吗?

我测试了一个简化版本(从
FeatureCollectionType
中删除了所有属性),它没有抛出第一个元素:

private static string xml = 
@"<?xml version='1.0' encoding='UTF-8'?>
<osgb:FeatureCollection
   xmlns:osgb='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb'
   xmlns:gml='http://www.opengis.net/gml'
   xmlns:xlink='http://www.w3.org/1999/xlink'
   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xsi:schemaLocation='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb http://www.ordnancesurvey.co.uk/xml/schema/v7/OSDNFFeatures.xsd'
   fid='GDS-58116-1'>
</osgb:FeatureCollection>";

public static void RunSnippet()
{
    using (var sr = new StringReader(xml))
    {
        var xs = new XmlSerializer(typeof(FeatureCollectionType));
        var obj = xs.Deserialize(sr);
        Console.WriteLine("if you are reading this, it didn't throw");
    }
}
private静态字符串xml=
@"
";
公共静态void RunSnippet()
{
使用(var sr=newstringreader(xml))
{
var xs=新的XmlSerializer(typeof(FeatureCollectionType));
var obj=xs.反序列化(sr);
WriteLine(“如果您正在阅读本文,它不会抛出”);
}
}

如何实例化
XmlSerializer

为什么不直接使用该方法?无需执行前两个步骤。从URI开始,使用WebClient通过
XmlSerializer.Deserialize(stream)
方法获得XMLsame问题,我显然缺少一些内容,但看不到您可以添加什么实际的反序列化代码(
XmlSerialization
实例化和其他内容)?因为这可能有问题。在一个小的测试项目中,创建一个FeatureCollectionType实例并将其序列化为文件。比较一下XMLs。谢谢大家!为精神检查格罗干杯。同时也在做类似的事情,把它剥回去。原来我在同一个命名空间中有另一个版本的xsd生成的类。因为xsd.exe生成分部类,所以ide不会抛出它。希望这能帮助别人犯愚蠢的错误。谢谢你的时间(很抱歉浪费了你的时间!)
private static string xml = 
@"<?xml version='1.0' encoding='UTF-8'?>
<osgb:FeatureCollection
   xmlns:osgb='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb'
   xmlns:gml='http://www.opengis.net/gml'
   xmlns:xlink='http://www.w3.org/1999/xlink'
   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xsi:schemaLocation='http://www.ordnancesurvey.co.uk/xml/namespaces/osgb http://www.ordnancesurvey.co.uk/xml/schema/v7/OSDNFFeatures.xsd'
   fid='GDS-58116-1'>
</osgb:FeatureCollection>";

public static void RunSnippet()
{
    using (var sr = new StringReader(xml))
    {
        var xs = new XmlSerializer(typeof(FeatureCollectionType));
        var obj = xs.Deserialize(sr);
        Console.WriteLine("if you are reading this, it didn't throw");
    }
}