【问题标题】:Serializing C# model into a xml data将 C# 模型序列化为 xml 数据
【发布时间】:2021-04-25 02:25:27
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

  • 问题出在哪里?
  • 抱歉!将问题添加到问题中

标签: c# asp.net xml serialization model


【解决方案1】:

使用以下:

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; }

    }
 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多