2013-04-12 2 views
1

У меня есть XML-структура, как показано ниже:вопрос в XML десериализации типа Enum

<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, 
} 

Когда я десериализации данных, я получение сильфона ошибки

{ «Была ошибка отражающего свойства„Кнопку“.»}

+0

Есть ли 'InnerException'? Если это так, то может иметь более значимую информацию. –

+0

Как вы делаете десериализацию? – outcoldman

+0

Ошибка, которую я опубликовал только в Innerexception. –

ответ

2

Во-первых, я ожидаю, что если вы посмотрели рекурсивно через исключения, вы найдете то, что вам нужно. Вывод из ошибок на самом деле очень подробный. Я не могу получить ошибку в том, как вы описываете, что свидетельствует о том, что пример, который вы показываете, не совпадает с вашим реальным кодом. Однако, давайте посмотрим на проблемы (надеюсь, это поможет показать вам, как это исправить), используя:

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. 

True: ваш XML начинается <buttons>, но у вас есть сказал, что корень <PageData>. Мы можем исправить это:

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

Сменив это - мы снова попробуем, и он отлично работает.

+0

Привет, Marc, проблема заключалась в статическом объявлении моего типа перечисления. Статические типы не допускаются при десериализации. Для публикации на форуме я удалил статическое ключевое слово из типа перечисления. Извините о путанице и благодарности за ваш ответ. –

Смежные вопросы