Как проанализировать строку enum и значение из модели XML в объект - PullRequest
0 голосов
/ 13 июня 2018

Проблема: Как проанализировать строку и значение перечисления из модели XML в объект.

Ошибка: Невозможно проанализировать значение перечисления из XML в объектную модель.

Я пытался проанализировать только значение enum, но не могу проанализировать модель.Я пробовал некоторые решения, но я все еще сталкивался с проблемой, пожалуйста, помогите посоветовать!Спасибо за вашу поддержку!

  • Перечисление:

    public enum DocumentType
    {
        DocumentType_A = 0,
        DocumentType_B = 1,
        DocumentType_C = 2
    }
    
  • XML:

    image

1 Ответ

0 голосов
/ 13 июня 2018

Сначала получите узел из XML, а затем проанализируйте его в перечислении.

const string str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Document><DocumentId>1</DocumentId><Attachment></Attachment><Metadata><DocumentType>0</DocumentType></Metadata></Document>";
var xml = new XmlDocument();
xml.LoadXml(str);

var node = xml.DocumentElement.SelectSingleNode("/Document/Metadata/DocumentType").InnerText;
DocumentType currentEnum = (DocumentType)Enum.Parse(typeof(DocumentType), node);
int currentEnumId = (int)currentEnum;

ОБНОВЛЕНИЕ на основе комментариев - десериализация xml для объекта с перечислениями

XML

<?xml version="1.0" encoding="utf-8"?>
<Document>
<DocumentId>1</DocumentId>
<Attachment></Attachment>
<Metadata>
    <DocumentType>1</DocumentType>
</Metadata>
</Document>

Модели

    public class Document 
    { 
        public long DocumentId { get; set; } 

        public Metadata Metadata { get; set; } 
    }

    public class Metadata
    {

        public string DocumentType  { get; set; } 

        public DocumentType Type 
        {
            get
            {
                return (DocumentType)Enum.Parse(typeof(DocumentType), DocumentType);
            }
        }

    }

    public enum DocumentType 
    { 
        DocumentType_A = 0, 
        DocumentType_B = 1, 
        DocumentType_C = 2 
    };

Преобразование XML в объект:

    var serializer = new XmlSerializer(typeof(Document)); 
    using (var reader = XmlReader.Create("/Users/brunomartinspro/Desktop/myxml.xml")) 
    { 
        Document document = (Document)serializer.Deserialize(reader); 
        var mySuperType = document.Metadata.Type; 
    }
...