1

我有一个如下的 XML 结构:

<buttons> 
  <button> 
    <text>Yes</text> 
    <type>Submit</type> 
  </button>
  <button> 
    <text>No</text> 
    <type>Cancel</type> 
  </button>
</buttons>

我有如下反序列化类:

[XmlRoot("PageData")]
public class PageData
{
    [XmlArray("buttons")]
    [XmlArrayItem("button")]
    public List<Button> Buttons { get; set; }
}

public class Button
{
    [XmlElement("text")]
    public string Text { get; set; }

    [XmlElement("type"))]
    public PANELBUTTONTYPE Type { get; set; }
}


public enum PANELBUTTONTYPE
{
    [XmlEnum(Name = "Submit")]
    Submit,

    [XmlEnum(Name = "Cancel")]
    Cancel,
}

当我反序列化数据时,出现以下错误

{“反映属性‘按钮’时出错。”}

4

1 回答 1

3

首先,我希望如果您确实递归地查看异常,您会找到您需要的。错误的输出实际上非常详细。我无法按照您描述的方式出错,这表明您显示的示例与您的真实代码不同。但是,让我们看看问题(希望这将有助于向您展示如何解决它),使用:

string s = @"<buttons> 
  <button> 
    <text>Yes</text> 
    <type>Submit</type> 
  </button>
  <button> 
    <text>No</text> 
    <type>Cancel</type> 
  </button>
</buttons>";

try
{
    var serializer = new XmlSerializer(typeof(PageData));
    var obj = (PageData)serializer.Deserialize(new StringReader(s));
}
catch (Exception ex)
{
    while (ex != null)
    {
        Console.Error.WriteLine(ex.Message);
        ex = ex.InnerException;
    }
}

我们得到:

There is an error in XML document (1, 2).
<buttons xmlns=''> was not expected.

是的:你的 xml 从 开始<buttons>,但你说根是<PageData>. 我们可以解决这个问题:

[XmlRoot("buttons")]
public class PageData
{
    [XmlElement("button")]
    public List<Button> Buttons { get; set; }
}

随着这一变化 - 我们再试一次,它工作正常。

于 2013-04-15T15:12:49.730 回答