我有BIObject
课程
public class BIObject
{
public string Database { get; set; }
public string Schema { get; set; }
public string Name { get; set; }
public string ObjectType { get; set; }
}
并且还有以下XML
<root>
<objects>
<object database="LynxReporting" schema="dbo" name="rptusp_GLTDRSummary" type="P"/>
<object database="IntraDay" schema="dbo" name="BMHGLCloseDetails" type="T"/>
<object database="LynxReporting" schema="dbo" name="factGeneralLedger" type="P"/>
</objects>
</root>
我需要从XML
创建List<IBObject>
注意:我将数据库中的XML加载到SqlXml 类型的属性中,因此我需要将SqlXml转换为List<IBObject>
看了几个答案,但无法弄清楚我是怎么做到的。
编辑:
我使用下面的代码
using (StringReader reader = new StringReader(myXmlString))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<BIObject>));
List<BIObject> objs = (List<BIObject>)serializer.Deserialize(reader);
}
但收到错误
XML文档(1,2)中存在错误。
和
root xmlns =&#39;&#39;没想到。
答案 0 :(得分:2)
创建一个“代表”xml结构的类
[XmlRoot("root")]
public class BIObjects
{
public BIObjects()
{
Objects = new List<BIObject>();
}
[XmlArray("objects")]
[XmlArrayItem("object")]
public List<BIObject> Objects { get; set; }
}
public class BIObject
{
[XmlAttribute("database")]
public string Database { get; set; }
[XmlAttribute("schema")]
public string Schema { get; set; }
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("type")]
public string ObjectType { get; set; }
}
然后使用您在问题中提供的相同序列化代码
using (StringReader reader = new StringReader(myXmlString))
{
XmlSerializer serializer = new XmlSerializer(typeof(BIObjects));
var objs = (BIObjects)serializer.Deserialize(reader);
// use results
// foreach(BIObject obj in objs.Objects)
}