XmlSerializer的 - 同一元素具有不同属性的
问题描述:
预期XML输出:XmlSerializer的 - 同一元素具有不同属性的
<add>
<doc>
<field name="id">1</field>
<field name="Myname">MyName1</field1>
</doc>
<doc>
<field name="id">2</field>
<field name="Myname">MyName2</field>
</doc>
<doc>
<field name="id">3</field>
<field name="Myname">MyName3</field>
</doc>
</add>
要得到上面的XML文档,我设计了以下类
public class doc
{
[XmlElement("field")]
public ID Id
{
get;
set;
}
[XmlElement("field2")]
public Name Myname
{
get;
set;
}
}
名称类将是
public class Name
{
[XmlText]
public string Namevalue
{
get;
set;
}
[XmlAttribute("name")]
public string Myname
{
get;
set;
}
}
XmlSerializer代码:
XmlSerializer serializer = new XmlSerializer(typeof(List<doc>), new XmlRootAttribute("add"));
这给我下面的输出
<add>
<doc>
<field name="id">1</field>
<field2 name="Myname">MyName1</field2>
</doc>
<doc>
<field name="id">2</field>
<field2 name="Myname">MyName2</field2>
</doc>
<doc>
<field name="id">3</field>
<field2 name="Myname">MyName3</field2>
</doc>
</add>
这里场2应该场我知道自己需要改变文档类场2为场但是这会导致错误。
我应该如何设计我的班级以获得预期的输出?
编辑: ID级别也会像名称类都有自己的属性
答
喜欢的东西:
[XmlType("add"), XmlRoot("add")]
public class WhateverAddIs {
private readonly List<Document> docs = new List<Document>();
[XmlElement("doc")]
public List<Document> Documents { get { return docs; } }
}
public class Document {
private readonly List<Field> fields = new List<Field>();
[XmlElement("field")]
public List<Field> Fields { get { return fields; } }
}
public class Field {
[XmlAttribute("name")]
public string Name { get; set; }
[XmlText]
public string Value { get; set; }
}
然后:
class Program {
static void Main() {
var add = new WhateverAddIs {
Documents = {
new Document {
Fields = {
new Field { Name="id", Value ="1"},
new Field { Name="Myname", Value ="Myname1"},
}
}, new Document {
Fields = {
new Field { Name="id", Value ="2"},
new Field { Name="Myname", Value ="Myname2"},
}
}, new Document {
Fields = {
new Field { Name="id", Value ="3"},
new Field { Name="Myname", Value ="Myname3"},
}
}
}
};
var ser = new XmlSerializer(add.GetType());
ser.Serialize(Console.Out, add);
}
}
答
两个选项
[XmlRoot("doc")]
public class Doc
{
[XmlElement("field",Order = 1)]
public Field Id
{
get;
set;
}
[XmlElement("field", Order = 2)]
public Field Name
{
get;
set;
}
}
[XmlRoot("doc")]
public class Field
{
[XmlText]
public string Value
{
get;
set;
}
[XmlAttribute("name")]
public string Name
{
get;
set;
}
}
enter code here
这将按给定顺序生成元素。或者使用像
[XmlRoot("doc")]
public class Doc
{
[XmlArray("field")]
public Field[] Fields
{
get;
set;
}
}
什么是'ID'类? – 2010-12-14 11:12:27
@Saeed pl看看编辑 – 2010-12-14 11:14:15
有趣的问题。我需要此信息来格式化XML数据以与DHTMLX网格一起使用。 – 2011-03-30 19:02:43