在我的项目中,遗留代码生成具有以下结构的xml:
<Output>
<Template recordID=12>
<Employer type="String">
<Value>Google</Value>
<Value>GigaSoft inc.</Value>
</Employer>
<Designation type="String">
<Value>Google</Value>
</Designation>
<Duration type="String" />
</Template>
</Output>
我想将此xml反序列化为具有以下属性的对象(我正在使用C#):
public class EmployerInfo
{
string[] _employerName;
string[] _designation;
string _duration;
}
我尝试使用成员周围的以下属性反序列化上面的xml(注意:我已经简化了代码。我知道我们不应该公开数据成员。这段代码仅用于实验目的)
[XmlElement("Template")]
public class EmployerInfo
{
[XmlElement("Employer")]
public string[] _employerName;
[XmlElement("Designation")]
public string[] _designation;
[XmlElement("Duration")]
public string _duration;
}
要反序列化,在主要课程中我写道:
XmlSerializer serial = new XmlSerializer(typeof(Output));
TextReader reader = new StreamReader(@"C:\sample_xml.xml");
EmployerInfo fooBar = (EmployerInfo)serial.Deserialize(reader);
reader.Close();
执行上面的代码后,fooBar对象中的所有成员都设置为null(默认值)。我认为这是因为xml结构与类结构不匹配。
我尝试使用xsd命令自动生成类,但它为每个数据成员创建了单独的类。
我试图给出像XmlElement(“Employer.Value”),XmlElement(“Template.Employer.Value”)之类的元素名称,但这也没有用。
有人可以建议一些方法将这个xml放入EmployerInfo
类吗?
提前致谢
答案 0 :(得分:1)
尝试:
using System.IO;
using System.Xml.Serialization;
[XmlType("Template")]
public class EmployerInfo
{
[XmlArray("Employer"), XmlArrayItem("Value")]
public string[] _employerName;
[XmlArray("Designation"), XmlArrayItem("Value")]
public string[] _designation;
[XmlElement("Duration")]
public string _duration;
}
public class Output
{
public EmployerInfo Template { get; set; }
}
static class Program
{
static void Main()
{
XmlSerializer serial = new XmlSerializer(typeof(Output));
using (var reader = new StringReader(@"<Output>
<Template recordID=""12"">
<Employer type=""String"">
<Value>Google</Value>
<Value>GigaSoft inc.</Value>
</Employer>
<Designation type=""String"">
<Value>Google</Value>
</Designation>
<Duration type=""String"" />
</Template>
</Output>"))
{
EmployerInfo fooBar = ((Output)serial.Deserialize(reader)).Template;
}
}
}
另请注意,从XmlSerializer(typeof(Output))
的反序列化方法返回的类型将是Output
记录。