将 C# 模型序列化为 xml 数据

Serializing C# model into a xml data

我正在尝试使用 C# 模型生成具有以下结构的 xml 文件:

<root>
  <row>
    <field name="placeholder">Test field 1</field>
    <field name="placeholder">Test field 2</field>
    <field name="placeholder">Test field 3</field>
    <field name="placeholder">Test field 4</field>
    <field name="placeholder">Test field 5</field>
  </row>
  <row>
    <field name="placeholder">Test field 1</field>
    <field name="placeholder">Test field 2</field>
    <field name="placeholder">Test field 3</field>
    <field name="placeholder">Test field 4</field>
    <field name="placeholder">Test field 5</field>
  </row>
</root>

我已经设置了这些模型,但我得到的所需输出完全错误

public class root
{
    public List<row> rows {get; set;}
}

public class row
{
    public List<field> fields {get; set;}
}

public class field
{
    [XmlAttribute("name")]
    public string AttributeName { get; set; }

    [XmlText]
    public string AttributeValue { get; set; }

}

这是我用来创建模型的代码

 var root = new root();
 root.rows = new List<row>();

 for (int x = 0; x < 2; x++)
 {
      root.rows.Add(new row()
      {
           fields = new List<field>()
           {
                new field()
                {
                      AttributeName="placeholder",
                      AttributeValue="test1",
                },
                new field()
                {
                      AttributeName="placeholder",
                      AttributeValue="test2",
                },
                new field()
                {
                      AttributeName="placeholder",
                      AttributeValue="test3",
                },
                new field()
                {
                      AttributeName="placeholder",
                      AttributeValue="test4",
                },
                new field()
                {
                      AttributeName="placeholder",
                      AttributeValue="test5",
                }
           }
    });
}

所以根应该有多个可以在代码中定义的行,但是,这些行将有多个字段,只是具有不同的属性名称和值。

新行将始终在循环中添加,因为循环中将有数据需要填写字段属性和值。

我面临的问题是当我 运行 得到以下输出时:

<root>
    <rows>
        <row>
            <fields>
                <field name="placeholder">test1</field>
                <field name="placeholder">test2</field>
                <field name="placeholder">test3</field>
                <field name="placeholder">test4</field>
                <field name="placeholder">test5</field>
            </fields>
        </row>
        <row>
            <fields>
                <field name="placeholder">test1</field>
                <field name="placeholder">test2</field>
                <field name="placeholder">test3</field>
                <field name="placeholder">test4</field>
                <field name="placeholder">test5</field>
            </fields>
        </row>
    </rows>
</root>

使用以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
         static void Main(string[] args)
         {
             root root = new root()
             {
                 rows = new List<row>() {
                    new row() {
                        fields = new List<field>() {
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 1"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 2"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 3"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 4"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 5"}
                        }
                    },
                    new row() {
                        fields = new List<field>() {
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 1"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 2"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 3"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 4"},
                            new field() { AttributeName = "placeholder", AttributeValue = "Test Field 5"}
                        }
                    }
                }
             };

             XmlWriterSettings settting = new XmlWriterSettings();
             settting.Indent = true;
             XmlWriter writer = XmlWriter.Create(FILENAME, settting);

             XmlSerializer serializer = new XmlSerializer(typeof(root));
             serializer.Serialize(writer, root);
 
  
         }
    }
    public class root
    {
        [XmlElement(ElementName = "row")]
        public List<row> rows { get; set; }
    }

    public class row
    {
        [XmlElement("field")]
        public List<field> fields { get; set; }
    }

    public class field
    {
        [XmlAttribute("name")]
        public string AttributeName { get; set; }

        [XmlText]
        public string AttributeValue { get; set; }

    }
 
}