从存储在SqlXml变量中的XML生成对象列表

时间:2016-09-30 18:10:12

标签: c# xml deserialization

我有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;没想到。

1 个答案:

答案 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)
}