如何动态地将类Array转换为C#中的XML文件? [英] How to convert class Array to XML file in C# dynamically?

查看:60
本文介绍了如何动态地将类Array转换为C#中的XML文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆