如何动态地将类Array转换为C#中的XML文件? [英] How to convert class Array to XML file in C# dynamically?
问题描述
我试图建立一个Xml
文件,其数据为类数组格式.基本类格式为
I trying to setting up a Xml
file whose data are in class array format. The Basic class format is
public partial class OrderTemplate {
public int Id { get; set; }
public int? OrderNumberCounterId { get; set; }
public int? SerialCounterId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? Critical { get; set; }
public Counter OrderNumberCounter { get; set; }
public ICollection<OperationTemplate> OperationTemplate { get; set; }
public ICollection<OrderTemplateAssemblyUnit> OrderTemplateAssemblyUnit { get; set; }
}
下面给出了相应的转换功能
The Respective conversion function is given below
public async Task<IActionResult> UploadXML([FromBody] OrderTemplate[] XMLData)
{
try
{
string fileName = "OrderTemplateXMLData.xml";
var folderName = Path.Combine("Uploads", "XMLUploads");
var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);
var fullPath = Path.Combine(pathToSave, fileName);
var dbPath = Path.Combine(folderName, fileName);
XDocument doc = new XDocument();
// Thinks the problem is here
doc.Add(new XElement("OrderTemplate",XMLData.Select(x => new XElement("item", x))));
if (Convert.ToString(XMLData).Length > 0)
{
return Ok(new { dbPath });
}
else
{
return BadRequest();
}
}
catch (Exception ex)
{
return StatusCode(500, "Internal server error");
}
}
}
当前结果
当前,我使用这样的数据生成了Xml文件.
CURRENT RESULT
Currently I generated the Xml file with data like this.
<?xml version="1.0" encoding="UTF-8"?>
<OrderTemplate>
<Data>KappDmsApi.Models.OrderTemplate</Data>
<Data>KappDmsApi.Models.OrderTemplate</Data>
</OrderTemplate>
实际结果
但是我需要在Header改变的情况下获取这样的数据.
ACTUAL RESULT
But I need to get the Data like this with the Header changed.
<OrderTemplate>
<Order>
<id>3</id>
<orderNumberCounterId>1</orderNumberCounterId>
<serialCounterId>3</serialCounterId>
<name>Toyota FS Back</name>
<description>Toyota FS Back</description>
<critical>0</critical>
<orderNumberCounter>null</orderNumberCounter>
</Order>
<Order>
<id>6</id>
<orderNumberCounterId>1</orderNumberCounterId>
<serialCounterId>3</serialCounterId>
<name>Toyota FS Cushion</name>
<description>Toyota FS Cushion</description>
<critical>0</critical>
<orderNumberCounter>null</orderNumberCounter>
</Order>
</OrderTemplate>
如何处理这种情况?上面的代码有什么变化吗?
How to handle this situation? Is there anything to change in the above code?
推荐答案
使用XML序列化程序实例代替手动构建XML文件.
Instead of manually constructing the XML file, use a XML serializer instance.
要使其正确生成结构,请使用具有修饰属性的包装器类,如下所示:
For it to correctly generate the structure, use a wrapper-class with decorated properties as follows:
class XmlOrderTemplate {
[XmlArray("OrderTemplate")]
[XmlArrayItem("Order")]
public List<OrderTemplate> Orders {get;set;}
}
using(var sw = new StreamWriter(fullPath)){
var serializer = new XmlSerializer(typeof(XmlOrderTemplate));
serializer.Serialize(sw, new XmlOrderTemplate {Orders = Data});
}
这篇关于如何动态地将类Array转换为C#中的XML文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!