当存在xmlns属性时,如何将xml解析为C#类?
我一直在为这个疯狂,我的xml:当存在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 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