反序列化没有列表根成员的XElement列表

时间:2014-08-16 14:05:57

标签: c# xml silverlight-5.0 xml-deserialization

在我的情况下,我有一个XMLTAG <phrase>,它可以包含一个或多个XMLTAG <q>,但它们可以以随机顺序出现在phraseTag值中。 这是xmlcode的一个例子:

<phrase level="1">
  Where 
  <q>are</q> 
  <subject>you</subject> 
  <q>going?</q>
</phrase>

对于反序列化我正在使用这个类:

[XmlRoot("phrase")]
public class Phrase
{
  public Phrase()
  {
    this.Quoted = new List<string>();
  }

  [XmlAttribute("level")]
  public int Level { get; set; }
  [XmlElement("subject")]
  public string Subject { get; set; }
  [XmlText]
  public string Value { get; set; }

  [XmlElement("q")]
  List<string> Quoted { get; set; }
}

我的扩展方法是:

public static T Deserialize<T>(this XElement xElement)
{
  try
  {
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    return (T)xmlSerializer.Deserialize(xElement.CreateReader());
  }
  catch (Exception)
  {
    throw;
  }
}

当我反序列化XML文档时,所有类成员都被成功序列化:

Phrase.Level = 1
Phrase.Subyect = "you"
Phrase.Value = "Where"

如何反序列化<q>代码? 我尝试使用XmlArrayAttibuteXmlArrayItemAttibute,但我没有此列表的成员(例如QTags)。

1 个答案:

答案 0 :(得分:0)

您需要XmlElement属性:)

[XmlRoot("phrase")]
public class Phrase
{
    [XmlElement("q")]
    public List<string> q { get; set; }

    [XmlAttribute("level")]
    public int Level { get; set; }
    [XmlElement("subject")]
    public string Subject { get; set; }
    [XmlText]
    public string Value { get; set; }
}