简体   繁体   English

将xdocument转换为IEnumerable <Dictionary<string, object> &gt;

[英]convert xdocument to IEnumerable<Dictionary<string, object>>

I am faced with a problem in my service, one Dataset will fill and convert into a serialized XML object: 我在服务中遇到问题,一个数据集将填充并转换为序列化的XML对象:

string xmlString;
System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(typeof(DataSet));
DataSet ds = new DataSet();
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
    oSerializer.Serialize(sw, ds);
    xmlString = sb.ToString();
}

This code return me a DataSet: 这段代码向我返回了一个数据集:

<?xml version="1.0" encoding="utf-16"?>
<DataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" minOccurs="0" />
                <xs:element name="CheckboxCol" type="xs:int" minOccurs="0" />
                <xs:element name="Last_x0020_Name" type="xs:string" minOccurs="0" />
                <xs:element name="First_x0020_Name" type="xs:string" minOccurs="0" />
                <xs:element name="User_x0020_Group" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <NewDataSet>
      <Table diffgr:id="Table1" msdata:rowOrder="0">
        <ID>1</ID>
        <CheckboxCol>0</CheckboxCol>
        <Last_x0020_Name>patel</Last_x0020_Name>
        <First_x0020_Name>krunal</First_x0020_Name>
      </Table>
      <Table diffgr:id="Table2" msdata:rowOrder="1">
        <ID>46</ID>
        <CheckboxCol>0</CheckboxCol>
        <Last_x0020_Name>123</Last_x0020_Name>
        <First_x0020_Name>123</First_x0020_Name>
        <User_x0020_Group>123</User_x0020_Group>
      </Table>
      <Table diffgr:id="Table3" msdata:rowOrder="2">
        <ID>47</ID>
        <CheckboxCol>0</CheckboxCol>
        <Last_x0020_Name>def</Last_x0020_Name>
        <First_x0020_Name>abc</First_x0020_Name>
        <User_x0020_Group />
      </Table>
    </NewDataSet>
  </diffgr:diffgram>
</DataSet>

Now I don't know how to read or convert into List<Dictionary<string, object>> , or any other object which I can bind into a Silverlight Datagrid. 现在,我不知道如何读取或转换为List<Dictionary<string, object>>或可以绑定到Silverlight Datagrid的任何其他对象。

Not sure I understand exactly what you're asking, but you may want to try XDocument.Parse to load your document. 不确定我确切了解您的要求,但是您可能想尝试XDocument.Parse来加载您的文档。 Then use Linq to generate a list... I'm not going to type up everything for you, but at some point you may want to be doing something like this: 然后使用Linq生成列表...我不会为您键入所有内容,但是在某些时候,您可能需要执行以下操作:

XDocument xdoc = XDocument.Parse(xmlString);
...
...
List<Dictionary<string, object>> list = xdoc.Root.Elements().Where(e=>e.Name.LocalName == "diffgram").Select(col => new Dictionary<string, object>() { { col.Name.LocalName.ToString(), col.Value } }).ToList();

Regards, Stephen 问候斯蒂芬

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM