怎样实现下面的Xml类结构
<page name="Test">
<header height="95">
<item text="C1" />
<item text="C2" />
</header>
</Page>我对item写了一个序列化的类Item
再写了一个Header类继承CollectionBase,打了个标签[XmlType("header")]
再写了一个page类
但现在问题出来了,我的header的height属性出不来,同时序列化的XML为Header,不是标签的"header"形式
<page name="Test">
<header height="95">
<item text="C1" />
<item text="C2" />
</header>
</Page>我对item写了一个序列化的类Item
再写了一个Header类继承CollectionBase,打了个标签[XmlType("header")]
再写了一个page类
但现在问题出来了,我的header的height属性出不来,同时序列化的XML为Header,不是标签的"header"形式
public string height
{
get
{
return _height;
}
set
{
_height=value;
}
}
[XmlType("header")]
public class HeaderData : CollectionBase
{
private string m_height = "90";
/// <summary>
/// Header的高度
/// </summary>
[XmlAttribute(AttributeName = "height")]
public string Height
{
get { return m_height; }
set { m_height = value; }
}
//下面的把Item集合进来了
...
[XmlType("header")]
public class HeaderData : CollectionBase
{
private string m_height = "90";
/// <summary>
/// Header的高度
/// </summary>
[XmlAttribute(AttributeName = "height")]
public string Height
{
get { return m_height; }
set { m_height = value; }
}
//下面的把Item集合进来了
...
这个东东干啥用的貌似不要吧
<page name="Test">
<header height="95">
<item text="C1" />
<item text="C2" />
</header>
</Page> 能实现height属性和包含item的集合类HeaderClass的序列化问题
那你的header应该是page的Element才对喔,你到底要不要把page一起序列化啊。
还有那个序列化 [Serializable] 貌似不该写在Header类里头,应该写在Page里啊!!!还有要[XmlRoot("page")]
<page name="Test">
<header text="C1" />
<header text="C2" >
</Page>
而不是以下形式
<page name="Test">
<header height="95">
<item text="C1" />
<item text="C2" />
</header>
</Page>
[Serializable]加不加再类头上都是一样的
写成[XmlRoot("page")] 也是一样的。
public Item[] DataItems//Item是你写得新的一个类
{
get { return this.items; }
set
{
this.items = value;
}
}header不需要继承CollectionBase
private List<ItemData> m_ItemCollection;
[XmlArrayItem("item")]
[XmlArray("ItemCollection")]
public List<ItemData> ItemCollection
{
get
{
if (m_ItemCollection == null)
{
m_ItemCollection = new List<ItemData>();
}
return m_ItemCollection;
}
set
{
m_ItemCollection = value;
}
}
但现在序列化出来的形式为
<Page>
<header height="90">
<ItemCollection>
<item text="C1" />
<item text="C2" />
...
中间多了一个<ItemCollection>
不晓得有办法去掉没?
[XmlArray("ItemCollection")]
换成
[XmlElement("item")]
[XmlElement("item")]
public ItemData[] DataItems//Item是你写得新的一个类
{
get { return this.items; }
set
{
this.items = value;
}
}
但ItemData[]实例化时本身要指定大小,你怎么解决大数据问题?
http://www.cnblogs.com/surfsky/archive/2007/03/13/673620.html
很奇怪,我之前的Header继承CollectionBase出来奇奇怪怪的东西,真不晓得是为什么?
也谢谢 wuyq11,你发的我看了,散分了。
不需要指定数组大小。
private ItemData[] items;
这样就OK了。
当然你在set里也可以写成这样: set
{
if (value == null)
throw new ArgumentException("data items cannot be null!");
this.items = value;
}