2012-02-08 5 views
1

У меня есть XML в этом формате -Deserialize комплекс XML в C# объект

<Areas> 
    <Area> 
    <Property Name="Test11">a1</Property> 
    <Property Name="Test12">a2</Property> 
    <Property Name="Test13">a3</Property> 
    <Property Name="Test14">a4</Property> 
    <Property Name="Test15">a5</Property> 
    </Area> 
    <Area> 
    <Property Name="Test21">b1</Property> 
    <Property Name="Test22">b2</Property> 
    <Property Name="Test23">b3</Property> 
    <Property Name="Test24">b4</Property> 
    <Property Name="Test25">b5</Property> 
    </Area> 
</Areas> 

Я генерировал класс, используя xsd.exe предоставляемые Microsoft, как -

[Serializable()] 
    public partial class Areas 
    { 
     [XmlArrayItem("Property", typeof(AreasAreaProperty))] 
     public AreasAreaProperty[][] Area { get; set; } 
    } 

    [Serializable()] 
    public partial class AreasAreaProperty 
    { 
     [XmlAttribute()] 
     public string Name { get; set; } 

     [XmlText()] 
     public string Value { get; set; } 
    } 

код для десериализации это -

private void Deserialize() 
     { 
      XmlSerializer xs = new XmlSerializer(typeof(Areas)); 
      FileStream fs = new FileStream("XMLFile1.xml", FileMode.Open); 
      XmlReader xr = new XmlTextReader(fs); 
      Areas a = (Areas)xs.Deserialize(xr); 
      fs.Close(); 
     } 

Но во время deserilaization, я получаю эту ошибку - Невозможно преобразовать тип 'AreasAreaProperty []' в 'AreasAreaProperty' Я получаю эту ошибку во время создания объекта XMLSerializer.

Как решить эту проблему ?? Заранее спасибо ..

ответ

3

Я думаю, что видел это раньше. XSD.exe не идеален, поэтому вам нужно немного поработать с результатами. В следующем коде, на последней строке, где у вас есть [] [], удалите один из [], так что это «общественное AreasAreaProperty [] Area ...»

[Serializable()] 
public partial class Areas 
{ 
    [XmlArrayItem("Property", typeof(AreasAreaProperty))] 
    public AreasAreaProperty[][] Area { get; set; } 
+0

Спасибо. Ошибка больше не возникает, но когда я проверяю значение объекта a. Он содержит только значения для последней области. Как получить значения для области выше? –

+0

Вы имеете в виду что-то вроде foreach (AreasAreaProperty a in foobar.Area) ? –

+0

@RohitVats Вы когда-нибудь задумывались, как получить оба района? Я пытаюсь сделать то же самое и пока не понял. Пожалуйста, напишите, если вы решили. Благодарю. – CodeChops

0

Если не четвертая строка вашего метода Deserialize() будет

Areas a = (Areas)xs.Deserialize(xr); 

вместо

Area a = (Area)xs.Deserialize(xr); 

, так как корневой элемент.

+0

Sory, это только опечатка. Я исправил это в вопросе. На самом деле я получаю эту ошибку в самой первой строке метода. –

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