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