Десериализация сложного объекта XML в C # - PullRequest
1 голос
/ 08 февраля 2012

У меня есть XML в этом формате -

<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();
        }

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

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

Ответы [ 3 ]

3 голосов
/ 08 февраля 2012

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

[Serializable()]
public partial class Areas
{
    [XmlArrayItem("Property", typeof(AreasAreaProperty))]
    public AreasAreaProperty[][] Area { get; set; }
1 голос
/ 09 февраля 2012

У меня были подобные проблемы в прошлом, взгляните на ответы на них:

Если у вас есть знания о вашей схеме, попробуйте добавить ее в xsd и не оставлять все до инструмента xsd.exe.

0 голосов
/ 08 февраля 2012

Не должна ли четвертая строка вашего метода Deserialize () быть

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

вместо

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

, поскольку ваш корневой элемент.

...