Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
如何将以下Xml转换为C#对象_C#_Xml - Fatal编程技术网

如何将以下Xml转换为C#对象

如何将以下Xml转换为C#对象,c#,xml,C#,Xml,以前没有,因此我创建了以下内容: <Reports> <Report> <data Id="2018" type="4" /> <ReportAddendum> <data raID="876" ratext="Text here 1." /> </ReportAddendum> <ReportAddendum>

以前没有
,因此我创建了以下内容:

<Reports>
   <Report>
       <data Id="2018" type="4" />
       <ReportAddendum>
          <data raID="876" ratext="Text here 1." />
       </ReportAddendum>
       <ReportAddendum>
          <data raID="134" ratext="Text here 2." />
       </ReportAddendum>
       <ReportAddendum>
          <data raID="552" ratext="sfdsfsd" />
       </ReportAddendum>
</Report>
[XmlRoot(ElementName=“Reports”)]
公开课堂报告
{
[XmlArray(“报告”)]
[XmlArrayItem(“数据”)]
公共列表报告{get;set;}
}
公共类报告列表
{
[XmlAttribute]
公共字符串Id{get;set;}
[XmlAttribute]
公共字符串类型{get;set;}
}
一切正常。但问题是后来添加的增编,即使我添加了,也没有转换

[XmlRoot(ElementName = "Reports")]
public class ClassReport
{
    [XmlArray("Report")]
    [XmlArrayItem("data")]
    public List<ReportList> Reports { get; set; }
}

public class ReportList
{
    [XmlAttribute]
    public string Id { get; set; }
    [XmlAttribute]
    public string type { get; set; }
}
[XmlRoot(ElementName=“Reports”)]
公开课堂报告
{
[XmlArray(“报告”)]
[XmlArrayItem(“数据”)]
公共列表报告{get;set;}
[XmlArray(“报告附录”)]
[XmlArrayItem(“数据”)]
公共列表AddendumList{get;set;}
}
然后创建一个类似于
ReportList
的类,用于将XML转换为C#models

发出

using (StreamReader r = new StreamReader(xmlFile))
{
    string xmlString = r.ReadToEnd();

    XmlSerializer ser = new XmlSerializer(typeof(Reports));

    using (TextReader reader = new StringReader(xmlString))
    {
        var reports = (Reports)ser.Deserialize(reader);
        Console.WriteLine($"{reports.Report.Data.Id}:{reports.Report.Data.Type}");
        foreach (var reportAddendum in reports.Report.ReportAddendum)
        {
            Console.WriteLine($"{reportAddendum.Data.RaID}:{reportAddendum.Data.Ratext}");
        }
    }
}
用于将XML转换为C#模型

发出

using (StreamReader r = new StreamReader(xmlFile))
{
    string xmlString = r.ReadToEnd();

    XmlSerializer ser = new XmlSerializer(typeof(Reports));

    using (TextReader reader = new StringReader(xmlString))
    {
        var reports = (Reports)ser.Deserialize(reader);
        Console.WriteLine($"{reports.Report.Data.Id}:{reports.Report.Data.Type}");
        foreach (var reportAddendum in reports.Report.ReportAddendum)
        {
            Console.WriteLine($"{reportAddendum.Data.RaID}:{reportAddendum.Data.Ratext}");
        }
    }
}

xml示例中没有关闭标记。而
AddendumList
应该是
ReportList
类的成员。请提供正确的样品并说明你需要什么为什么要手工做?检查一下你的名字,你的xml中有一个名为
Reports
的根标记,而它对应的类名是
ClassReport
(没有尾随的s)。在这个类中,您有一个名为
Reports
的属性,它被序列化为
data
。该列表的类型本身被命名为
…list
,而实际上它表示一个
报告
。这同样适用于您的
AddendumList
-类型,它可能应该是
Addendum
,因为它不表示列表,而只是列表中的一个元素。抱歉,我实际上重命名了它们,好吧,让我稍后编辑它。您的xml示例中没有关闭
标记。而
AddendumList
应该是
ReportList
类的成员。请提供正确的样品并说明你需要什么为什么要手工做?检查一下你的名字,你的xml中有一个名为
Reports
的根标记,而它对应的类名是
ClassReport
(没有尾随的s)。在这个类中,您有一个名为
Reports
的属性,它被序列化为
data
。该列表的类型本身被命名为
…list
,而实际上它表示一个
报告
。这同样适用于您的
AddendumList
-类型,它可能应该是
Addendum
,因为它不代表列表,而只是列表中的一个元素。抱歉,我实际上重命名了它们,好吧,让我稍后编辑它。我不想使用该类型,因为我必须重新处理整个列表,而且它已经很大了。除了从头开始工作,还有其他方法吗?@user3856437已经修改了模型。您需要3个额外的类来支持新属性
reportaddress
@HimBromBeere,它们修改了模型中的
数据类型。请验证我不想用那个,因为我必须重新处理整个事情,而且它已经很大了。除了从头开始工作,还有其他方法吗?@user3856437已经修改了模型。您需要3个额外的类来支持新属性
reportaddress
@HimBromBeere,它们修改了模型中的
数据类型。请核实
using (StreamReader r = new StreamReader(xmlFile))
{
    string xmlString = r.ReadToEnd();

    XmlSerializer ser = new XmlSerializer(typeof(Reports));

    using (TextReader reader = new StringReader(xmlString))
    {
        var reports = (Reports)ser.Deserialize(reader);
        Console.WriteLine($"{reports.Report.Data.Id}:{reports.Report.Data.Type}");
        foreach (var reportAddendum in reports.Report.ReportAddendum)
        {
            Console.WriteLine($"{reportAddendum.Data.RaID}:{reportAddendum.Data.Ratext}");
        }
    }
}
2018:4
876:Text here 1.
134:Text here 2.
552:sfdsfsd