将列表对象序列化为XML值异常:出现错误,反映了类型“ ..Otrx”

时间:2018-12-21 08:08:18

标签: c# .net xml serialization

我创建了一个序列化为xml的对象:该对象的详细信息如下:

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

这是clas 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 :(得分:3)

关于以下情况的例外

  

无法序列化类型为'...'的成员'ORow.ColList',有关更多详细信息,请参见内部异常。

它说,在内部例外情况下(如上所述):

  

OCol无法序列化,因为它没有无参数的构造函数。

所以:添加一个无参数的构造函数:

public OCol() { }

或仅删除显式构造函数,这可能会更容易。

实际上,我认为您根本不需要col 的类型-这应该在ORow中起作用:

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

不过,老实说,您的模型似乎过于复杂。如果不确定,也许最实用的做法是复制所需的 xml ,然后使用Edit-> Paste Special-> XML As Classes粘贴,您会得到一些适用于所需xml的内容(尽管通常可以对其进行重大清理)。

enter image description here