Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化此XML文件并获取数据_C#_Xml_Deserialization - Fatal编程技术网

C# 反序列化此XML文件并获取数据

C# 反序列化此XML文件并获取数据,c#,xml,deserialization,C#,Xml,Deserialization,我有一个XML文件: <readyGrid> <gridRows> <gridRow id="0"> <gridCol id="1">N.Doc.</gridCol> <gridCol id="2">N.Doc. solo numero</gridCol> <gridCol id="3">Data</gridCol> <gridCol id="4">Intestatario&l

我有一个XML文件:

<readyGrid>
<gridRows>
<gridRow id="0">
<gridCol id="1">N.Doc.</gridCol>
<gridCol id="2">N.Doc. solo numero</gridCol>
<gridCol id="3">Data</gridCol>
<gridCol id="4">Intestatario</gridCol>
<gridCol id="5">Causale</gridCol>
<gridCol id="6">Stato</gridCol>
<gridCol id="7">Tot.doc.</gridCol>
<gridCol id="8">Data</gridCol>
<gridCol id="9">Peso</gridCol>
<gridCol id="10">Contrassegno</gridCol>
<gridCol id="11">Porto</gridCol>
<gridCol id="12">CAP</gridCol>
<gridCol id="13">Destinazione</gridCol>
<gridCol id="14">Indirizzo</gridCol>
<gridCol id="15">Citta'</gridCol>
<gridCol id="16">Provincia</gridCol>
<gridCol id="17">Colli</gridCol>
<gridCol id="18">Email</gridCol>
<gridCol id="19">Servizio</gridCol>
<gridCol id="20">Pagamento</gridCol>
<gridCol id="21">Fermo deposito</gridCol>
<gridCol id="22">Telefono destinatario</gridCol>
<gridCol id="23">Cellulare intestatario</gridCol>
</gridRow>
<gridRow id="1">
<gridCol id="1">any</gridCol>
<gridCol id="2">any</gridCol>
<gridCol id="3">any</gridCol>
<gridCol id="4">any</gridCol>
<gridCol id="5">any</gridCol>
<gridCol id="6">any</gridCol>
<gridCol id="7">any</gridCol>
<gridCol id="8">any</gridCol>
<gridCol id="9">any</gridCol>
<gridCol id="10">any</gridCol>
<gridCol id="11">any</gridCol>
<gridCol id="12">any</gridCol>
<gridCol id="13">any</gridCol>
<gridCol id="14">any</gridCol>
<gridCol id="15">any</gridCol>
<gridCol id="16">any</gridCol>
<gridCol id="18">any</gridCol>
<gridCol id="19">any</gridCol>
<gridCol id="20">any</gridCol>
<gridCol id="22">any</gridCol>
</gridRow>
</gridRows>
</readyGrid>

医生。
医生。独唱第一名
资料
无遗嘱者
因果关系
斯塔托
Tot.doc。
资料
比索
对立面
波尔图
帽子
脱硝脲
地址
西塔'
省
科利
电子邮件
塞尔维齐奥
帕加门托
费莫矿床
目的地电信
国际法院
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
任何
它是一个动态文件,其中可以有许多gridRow,都在标记内

:如果id为0,则表示标题列,并从id=“1”列出所有数据

我需要在类中反序列化这个.XML文件。以下是我目前掌握的情况:

[XmlRoot(Namespace = "", ElementName = "readyGrid")]
public class Root
{
    [XmlElement("gridRows")]
    public List<GridRows> GridRows { get; set; }
}

public class GridRows
{
    [XmlElement("gridRow")]
    public List <GridRow> GridRow { get; set; }
}

public class GridRow
{
    [XmlAttribute("id")]
    public int Id { get; set; } 
    [XmlAttribute("gridCol")]
    public List<GridCol> GridCol { get; set; }
}

public class GridCol
{
    [XmlAttribute("id")]
    public int idColumn { get; set; }
    public string Content { get; set; }
}
[XmlRoot(Namespace=”“,ElementName=“readyGrid”)]
公共类根
{
[XmlElement(“网格行”)]
公共列表网格行{get;set;}
}
公共类网格
{
[XmlElement(“gridRow”)]
公共列表网格行{get;set;}
}
公共类网格
{
[XmlAttribute(“id”)]
公共int Id{get;set;}
[xmldattribute(“gridCol”)]
公共列表GridCol{get;set;}
}
公共类GridCol
{
[XmlAttribute(“id”)]
public int idColumn{get;set;}
公共字符串内容{get;set;}
}
以及应反序列化并放入类中的代码:

XmlSerializer serializer = new XmlSerializer(typeof(Root));
var reader = new StreamReader(uploadFilePath);
List<GridRows> results = ((Root)serializer.Deserialize(reader)).GridRows;
XmlSerializer serializer=新的XmlSerializer(typeof(Root));
var reader=newstreamreader(uploadFilePath);
列表结果=((根)序列化程序.反序列化(读取器)).GridRows;
但是,最后一个代码示例不起作用,在第一行崩溃。(System.InvalidOperationException,反射错误…)

我想知道是否有一种最简单的方法可以在类中反序列化这个XML文件,或者为了使它工作,我必须在代码中修改什么。
重要的是,我使用id=”“和标签之间的内容。

最简单的方法当然仍然是.NET SDK附带的xsd.exe。在开发人员命令提示符下,您可以像

xsd <Path to your example XML file> /classes
xsd/classes

它将为您生成类似于XML文件结构的类。作为替代方案,它还可以为您生成一个模式,并且有几个选项供您调优代码生成,例如通过提供名称空间。只需在没有任何参数的情况下调用xsd.exe,它就会告诉您如何使用它。

对类进行了一些小的修改后,它就可以工作了

XmlRoot("readyGrid")]
public class Root
{
    [XmlElement("gridRows")]
    public List<GridRows> GridRows { get; set; }
}

public class GridRows
{
    [XmlElement("gridRow")]
    public List<GridRow> GridRow { get; set; }
}

public class GridRow
{
    [XmlAttribute("id")]
    public int Id { get; set; }

    [XmlElement("gridCol")]
    public List<GridCol> GridCol { get; set; }
}

public class GridCol
{
    [XmlAttribute("id")]
    public int idColumn { get; set; }

    [XmlText]
    public string Content { get; set; }
}

发布了一个你可能感兴趣的答案
XmlSerializer serializer = new XmlSerializer(typeof(Root));
using (var reader = new StreamReader(xmlFilePath))
{
    var root = ((Root)serializer.Deserialize(reader));
}