[英]How to convert class Array to XML file in C# dynamically?
我试图设置一个数据为类数组格式的Xml
文件。 基本类格式是
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; }
}
下面给出了各自的转换函数
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 文件。
<?xml version="1.0" encoding="UTF-8"?>
<OrderTemplate>
<Data>KappDmsApi.Models.OrderTemplate</Data>
<Data>KappDmsApi.Models.OrderTemplate</Data>
</OrderTemplate>
但是我需要在更改标题的情况下获取这样的数据。
<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>
如何处理这种情况? 上面的代码有什么要改变的吗?
使用 XML 序列化程序实例,而不是手动构建 XML 文件。
为了正确生成结构,请使用具有装饰属性的包装类,如下所示:
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});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.