Исключение объекта списка сериализации для значения XML: при отображении типа «..Otrx» произошла ошибка - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю объект для сериализации в xml: подробности этого объекта, как показано ниже:

[XmlRoot(ElementName="trx")]
public class OTrx{
    [XmlElement("body")]
    public OBody Body {get;set;}
}

, и это класс OBody:

public class OBody {
        [XmlElement("list")]
            public Olist list {get;set;}
    }

, класс Olist:

public class Olist {
            [XmlAttribute("h")]
                public string h {get;set;}
 [XmlAttribute("colcnt")]
                public string list {get;set;}
 [XmlAttribute("list")]
                public stringlist {get;set;}
 [XmlElement("row")]
                public List<ORow> RowList {get;set;}
        }

класс ORow:

public class ORow{
            [XmlElement("col")]
                public List<OCol> ColList {get;set;}
        }

класс OCol:

public class OCol{
    [XmlText]
    public string Text {get;set;}
    public Ocol(string val){
     this.Text=val;
    }
}

и мне нужен вывод:

<trx>
....
<body>
<list h="a,b,c,d,e" colcnt="5" rowcnt="5">
   <row>
       <col>value1</col>
       <col>value2</col>
       <col>value3</col>
       <col>value4</col>
       <col>value5</col>
  </row>
 <row>...</row>
 <row>...</row>
 <row>...</row>
 <row>...</row>
</list>
</body>
</trx>

Я отлаживаюкод, это показывает, что исключение происходит в списке, когда я комментирую этот список, сериализация проходит успешно, как:

<row/><row/><row/><row/><row/><row/><row/><row/>
</list></body></trx>

Скажите, пожалуйста, в чем я не прав?

1 Ответ

0 голосов
/ 21 декабря 2018

под исключением о

Невозможно сериализовать элемент 'ORow.ColList' типа '...', подробности см. Во внутреннем исключении.

там написаново внутреннем исключении (как указано):

OCol не может быть сериализован, поскольку у него нет конструктора без параметров.

Итак: добавьте конструктор без параметров:

public OCol() { }

или просто удалите явный конструктор, что, вероятно, проще.

На самом деле, я не думаю, что вам нужен тип для col вообще - этодолжен работать в ORow:

public class ORow
{
    [XmlElement("col")]
    public List<string> Values { get; set; } 
}

Если честно, ваша модель кажется слишком сложной для того, что вам нужно.Если вы не уверены, возможно, наиболее прагматичным будет скопировать xml , который вы хотите, и использовать Edit -> Paste Special -> Paste XML As Classes, и вы получите что-то, что будет работать для xml, который вы хотите (хотя которые часто могут быть значительно очищены).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...