C# for loop inside deep XML 序列化

C# for loop inside deep XML serialization

我正在尝试制作一个深层嵌套的 XML 文件,我想在其中插入来自另一个文件的一些数据。

现在看起来如何:

  <Documents Count="1">
    <Item DATE="2020-09-01" CREATEDBY="TestUser">
      <Row ITEMID="" ACTIVE="" />
    </Item>
  </Documents>

我希望它看起来像这样:

  <Documents Count="1">
    <Item DATE="2020-09-01" CREATEDBY="TestUser">
      <Row ITEMID="" ACTIVE="" />
      <Row ITEMID="" ACTIVE="" />
      <Row ITEMID="" ACTIVE="" />
      <Row ITEMID="" ACTIVE="" />
    </Item>
  </Documents>

问题是节点“Item”中必须有很多行(节点“Row”),我想通过读取它的每一行来从另一个文件中填充数据并执行此操作我需要一个 for 循环。 我卡住了,因为它不允许我在其中添加 for 循环,有没有办法以某种方式在其中插入 for 循环?

谢谢。

这是我到目前为止编写的代码:

class Program
{
    static void Main(string[] args)
    {
        var xmlData = new XmlData();

        xmlData.documents.documentsItem.Add(new DocumentsItem()
        {
            DATE = DateTime.Now.ToString("yyyy-MM-dd"),
            CREATEDBY = "TestUser",

            documentsRow = new List<DocumentsRow>()
            {
            //<-- I want to insert a 'for' loop in here, but it won't allow me to do that
                new DocumentsRow()
                {
                    ITEMID = "",
                    ACTIVE = "",
                }
            }
            });
        xmlData.documents.Count = xmlData.documents.documentsItem.Count;

        using (StreamWriter sw = new StreamWriter(@"c:\a\test.xml", false, Encoding.UTF8))
        {
            new XmlSerializer(typeof(XmlData)).Serialize(sw, xmlData);
        }

    }
}


public class XmlData
{
    [XmlElement("Documents")]
    public Documents documents = new Documents();

    [XmlIgnore]
    public DocumentsRow documentsRow = new DocumentsRow();
}


public class Documents
{
    public Documents()
    {
        documentsItem = new List<DocumentsItem>();
    }

    [XmlAttribute]
    public int Count { get; set; }

    [XmlElement("Item")]
    public List<DocumentsItem> documentsItem { get; set; }
}

public class DocumentsItem
{
    public DocumentsItem()
    {
        documentsRow = new List<DocumentsRow>();
    }

    [XmlAttribute]
    public string DATE { get; set; }

    [XmlAttribute]
    public string CREATEDBY { get; set; }

    [XmlElement("Row")]
    public List<DocumentsRow> documentsRow { get; set; }
}

public class DocumentsRow
{
    [XmlAttribute]
    public string ITEMID { get; set; }

    [XmlAttribute]
    public string ACTIVE { get; set; }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApp31
{
    class Program
    {
        static void Main(string[] args)
        {
            var xmlData = new XmlData();

            xmlData.documents.documentsItem.Add(new DocumentsItem()
            {
                DATE = DateTime.Now.ToString("yyyy-MM-dd"),
                CREATEDBY = "TestUser",

                documentsRow = GetDocuments(100)
            });
            xmlData.documents.Count = xmlData.documents.documentsItem.Count;

            using (StreamWriter sw = new StreamWriter(@"c:\a\test.xml", false, Encoding.UTF8))
            {
                new XmlSerializer(typeof(XmlData)).Serialize(sw, xmlData);
            }

        }
        private static List<DocumentsRow> GetDocuments(int number)
        {
            var documents = new List<DocumentsRow>();
            for (int i = 0; i <= number; i++)
            {
                documents.Add(new DocumentsRow() { ITEMID = "", ACTIVE = "" });
            }
            return documents;
        }
    }
    public class XmlData
    {
        [XmlElement("Documents")]
        public Documents documents = new Documents();

        [XmlIgnore]
        public DocumentsRow documentsRow = new DocumentsRow();
    }


    public class Documents
    {
        public Documents()
        {
            documentsItem = new List<DocumentsItem>();
        }

        [XmlAttribute]
        public int Count { get; set; }

        [XmlElement("Item")]
        public List<DocumentsItem> documentsItem { get; set; }
    }

    public class DocumentsItem
    {
        public DocumentsItem()
        {
            documentsRow = new List<DocumentsRow>();
        }

        [XmlAttribute]
        public string DATE { get; set; }

        [XmlAttribute]
        public string CREATEDBY { get; set; }

        [XmlElement("Row")]
        public List<DocumentsRow> documentsRow { get; set; }
    }

    public class DocumentsRow
    {
        [XmlAttribute]
        public string ITEMID { get; set; }

        [XmlAttribute]
        public string ACTIVE { get; set; }
    }
}