如何将以下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