2016-09-30 64 views
0

从XML对象的名单上有BIObject生成存储的SqlXml可变

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)。

根的xmlns = '' 是没有预料到。

+0

使用[XmlSerializer类](https://开头MSDN .microsoft.com/en-us/library/system.xml.serialization.xmlserializer(v = vs.110).aspx) – Fabio

+0

感谢您的提示。请检查我的编辑,看看我已经尝试过。 – FLICKER

回答

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) 
} 
+0

太棒了!谢谢。 – FLICKER