我创建了一个序列化为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>
请告诉我我怎么了?
答案 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的内容(尽管通常可以对其进行重大清理)。