[英]XmlSerializer - Same Element with different Attributes
預期的XML輸出:
<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>
這里field2應該是字段我知道我需要將field2更改為doc類中的字段 ,但這會導致錯誤。
我應該如何設計我的課程以獲得預期的輸出?
編輯: ID類也將看起來像具有自己的屬性的Name類
兩種選擇
[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;
}
}
就像是:
[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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.