当存在xmlns属性时,如何将xml解析为C#类?

当存在xmlns属性时,如何将xml解析为C#类?,c#,xml,console-application,C#,Xml,Console Application,我一直在为这个疯狂,我的xml: <?xml version="1.0"?> <ArrayOfWorItems xmlns="http://someUrl" xmlns:i="http://www.w3.org/"> <WorkItem> <ItemID>596</ItemID> <ItemPressure>35.0000</ItemPressure> <ItemTableID>

我一直在为这个疯狂,我的xml:

<?xml version="1.0"?>
<ArrayOfWorItems xmlns="http://someUrl" xmlns:i="http://www.w3.org/">
<WorkItem>
    <ItemID>596</ItemID>
    <ItemPressure>35.0000</ItemPressure>
    <ItemTableID>14</ItemTableID>
    <ItemVersion>AAAAAAAADGQ=</ItemVersion>
    <ItemTemperature>-196.0000</ItemTemperature>
</WorkItem>
<WorkItem>
    <ItemID>596</ItemID>
    <ItemPressure>35.0000</ItemPressure>
    <ItemTableID>14</ItemTableID>
    <ItemVersion>AAAAAAAADGQ=</ItemVersion>
    <ItemTemperature>-196.0000</ItemTemperature>
</WorkItem>
<WorkItem>
    <ItemID>596</ItemID>
    <ItemPressure>35.0000</ItemPressure>
    <ItemTableID>14</ItemTableID>
    <ItemVersion>AAAAAAAADGQ=</ItemVersion>
    <ItemTemperature>-196.0000</ItemTemperature>
</WorkItem>
    <WorkItem>
    <ItemID>596</ItemID>
    <ItemPressure>35.0000</ItemPressure>
    <ItemTableID>14</ItemTableID>
    <ItemVersion>AAAAAAAADGQ=</ItemVersion>
    <ItemTemperature>-196.0000</ItemTemperature>
</WorkItem>

</ArrayOfWorItems>

596
35
14
AAAAAAAADGQ=
-196.0000
596
35
14
AAAAAAAADGQ=
-196.0000
596
35
14
AAAAAAAADGQ=
-196.0000
596
35
14
AAAAAAAADGQ=
-196.0000
我想将其解析到我的类:

[XmlRoot("ArrayOfWorItems")]
public class ArrayOfWorItems
{
    public List<WorkItem> WorkItem { get; set; }
}
[XmlRoot(“ArrayOfWorItems”)]
公共类ArrayOfForItems
{
公共列表工作项{get;set;}
}
逻辑:

    var doc = new XmlDataDocument();

    doc.Load(path);


    XmlNamespaceManager xmlNS = new XmlNamespaceManager(doc.NameTable);

    xmlNS.AddNamespace("stupid_xmlns", @"http://someUrl");

    string contents = doc.OuterXml;

    MyXmlHandler handler = new MyXmlHandler();

    var t = handler.ParseXml<ArrayOfWorItems>(contents);
var doc=new XmlDataDocument();
单据加载(路径);
XmlNamespaceManager xmlNS=新的XmlNamespaceManager(doc.NameTable);
AddNamespace(“愚蠢的”http://someUrl");
字符串内容=doc.OuterXml;
MyXmlHandler=新的MyXmlHandler();
var t=handler.ParseXml(内容);
解析方法:

    public T ParseXml<T>(string  xmlStream)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (StringReader reader = new StringReader(xmlStream))
        {
            var items  = (T)(serializer.Deserialize(reader));

            return items;
        }
    }
public T ParseXml(字符串xmlStream)
{
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(StringReader=new StringReader(xmlStream))
{
var items=(T)(序列化程序.反序列化(读取器));
退货项目;
}
}
错误:

InnerException={”http://someUrl”“没有 预期的。”} Message=“XML文档(1,23)中有错误。”

已经有一段时间没弄明白了,
如何解决此问题?

根类还需要使用Namespace属性指定

[XmlRoot("ArrayOfWorItems", Namespace = "http://someUrl")]

在和一个朋友商量之后,我设法使所有的工作都顺利进行

@Gowri Pranith从一开始就在金钱上是正确的,但我输入了错误的名称空间,一旦我发现我还有另一个问题:

我习惯于解析json对象,因此解析时的逻辑不同。 我的一位朋友告诉我,我的父类中不能有list属性,因为xml处理该属性的方式与解析json时不同,正确的方法是:

[XmlRoot("ArrayOfWorItems", Namespace = "http://someUrl")]
public class ArrayOfWorItems: List<WorkItem>
{
}
[XmlRoot(“ArrayOfOrItems”,名称空间=”http://someUrl")]
公共类ArrayOfOrItems:列表
{
}

父类继承列表,解析器将它们呈现为子类

接受此答案,因为它对问题是正确的,但为了完成所有这些工作,我还添加了另一个答案。谢谢你@Gowri Pranith