2014-11-17 2 views
1

Я пытаюсь десериализовать XML-документ в класс C#. вот документ.Deserialize XML Document

<?xml version="1.0" encoding="utf-8"?> 
<Exclusionpolicys> 
    <Exclusionpolicy> 
    <ValuationRoutes> 
     <ValuationRoute>value1</ValuationRoute> 
     <ValuationRoute>Value2</ValuationRoute> 
    </ValuationRoutes> 
    <ExcludeHives> 
     <ExcludeHive name="samplename1"/> 
     <ExcludeHive name="samplename2"/> 
     <ExcludeHive name="samplename3"/> 
     <ExcludeHive name="samplename4"/> 
    </ExcludeHives> 
    </Exclusionpolicy> 
    <Exclusionpolicy> 
    <ValuationRoutes> 
     <ValuationRoute>Value3</ValuationRoute> 
    </ValuationRoutes> 
    <ExcludeHives> 
     <ExcludeHive name="samplename5"/> 
    </ExcludeHives> 
    </Exclusionpolicy> 
</Exclusionpolicys> 

Это класс, который я создал.

[XmlRootAttribute("Exclusionpolicys")] 
    public class ExclusionPolicys 
    { 
     [XmlElement("ExcludeHive ")] 
     public ExcludedPolicyHives[] ExcludedHives { get; set; } 
     [XmlElement("ValuationRoute")] 
     public ExcludedPolicyValuationRoute[] ValuationRoutes { get; set; } 
    } 


    public class ExcludedPolicyHives : IExcludedHives 
    { 
     public List<string> Hives { get; set; } 
    } 

    public class ExcludedPolicyValuationRoute 
    { 
     public List<string> ValuationRoutes { get; set; } 
    } 

Когда я Deserialize ... это не бросает какую-то ошибку, но дайте мне объект ExclusionPolicys с нулевым значением для обоих свойств.

Может кто-нибудь помочь в определении того, что не так с моим определением класса.

Я хочу десериализовать его в список/массив пары keyValue или аналогичный этому.

Заранее спасибо.

Благодарим за помощь. Рабочая копия здесь ...

[XmlRoot("Exclusionpolicys")] 
    public class ExclusionPolicys 
    { 
     [XmlElement("Exclusionpolicy")] 
     public List<Exclusionpolicy> Exclusionpolicy { get; set; } 
    } 

    public class Exclusionpolicy 
    { 

     [XmlElement("ValuationRoutes")] 
     public List<ExcludedPolicyValuationRoutes> ValuationRoutes { get; set; } 

     [XmlElement("ExcludeHives")] 
     public List<ExcludedHiveses> ExcludedHives { get; set; } 

    } 

    [XmlRoot("ExcludeHives")] 
    public class ExcludedHiveses 
    { 
     [XmlElement(ElementName = "ExcludeHive")] 
     public List<string> Hives { get; set; } 
    } 

    public class ExcludedPolicyValuationRoutes 
    { 
     [XmlElement("ValuationRoute")] 
     public List<string> ValuationRoute { get; set; } 
    } 

ответ

0

Изменение библиотеки классов в коде ниже, так как XML Deserialixed должны быть совместимы с XML, то есть: библиотека классов должна непосредственно отражать XML-код-накрест.

[XmlRoot("Exclusionpolicys")] 
    public class ExclusionPolicys 
    { 
     [XmlElement("Exclusionpolicy")] 
     public List<Exclusionpolicy> Exclusionpolicy; 
    } 

    public class Exclusionpolicy 
    { 

     [XmlElement("ValuationRoutes")] 
     public List<ExcludedPolicyValuationRoutes> ValuationRoutes { get; set; } 

     [XmlElement("ExcludeHives")] 
     public List<ExcludedPolicyHives> ExcludedHives { get; set; } 
    } 

    public class ExcludedPolicyHives 
    { 
     [XmlElement("ExcludeHive")] 
     public List<ExcludedPolicyHive> ExcludedPolicyHive; 
    } 

    public class ExcludedPolicyValuationRoutes 
    { 
     [XmlElement("ValuationRoute")] 
     public List<ValuationRoute> ValuationRoute { get; set; } 
    } 

    public class ExcludedPolicyHives 
    { 
     public string Hives { get; set; } 
    } 

    public class ExcludedPolicyValuationRoute 
    { 
     public string ValuationRoutes { get; set; } 
    } 
+0

Не могли бы вы объяснить, что вы изменили и почему вы его изменили? – Default

+0

Сделано несколько изменений, и это сработало ... – Abhash786

+0

@ Default-Что вы видите здесь в вопросе, вторая часть, которая указывает рабочий код, была моим первоначальным ответом на него, который был, предположительно, на 80% правильным. – SanyTiger

0

В Visual Studio 2012 создан конвертирующий инструмент - я не знаю, как он выглядит с другим VS.

  1. Создайте новый проект с .Net Framework> = 4.5.
  2. Скопируйте XML в буфер обмена.
  3. Выберите «Редактировать» -> «Специальная вставка» -> Вставить XML в качестве классов.

Теперь у вас есть сгенерированные классы, вам не нужно создавать их вручную.