继承ICollection做了一个类
但是序列化以后发现XML为空[Serializable]
public class EquipmentCollection:System.Collections.ICollection
{ private Equipment[] _array=new Equipment[16];
private int _size=0;
private int _capacity=0; // 集合中最后一个有效元素
private const int _MinimumGrow = 4;
public EquipmentCollection()
{// _array = new Equipment[16];
// _capacity = 0;
// _size = 0;
}
#region interface require
//这里是必须通过实现提供的一组方法...
//----------------------------
public virtual void CopyTo(Array array, int index)
{
//在此演示中不支持...
throw new Exception("此实现中不支持此方法");
} public virtual int Count
{
get { return _size; }
} public virtual Object SyncRoot
{
get { return this; }
} public virtual bool IsSynchronized
{
get { return false; }
} public virtual IEnumerator GetEnumerator()
{
return new EquipmentEnumerator(this);
}
//---------------------------- #endregion// public Equipment Item[int index]
// {
// get{return this._array[index];}
// set{this._array[index]=value;}
// } public bool Add(Equipment et)
{
foreach(Equipment e in _array)
{
if(!(e==null))
{
if(e.ID ==et.ID) return false;
}
}
if (_size == _array.Length)
{
int newcapacity = _array.Length * 2;
if (newcapacity < _array.Length + _MinimumGrow)
{
newcapacity = _array.Length + _MinimumGrow;
}
SetCapacity(newcapacity);
}
_array[_capacity] = et;
_capacity = (_capacity + 1) % _array.Length;
_size++; return true;
}
private void SetCapacity(int capacity)
{
Equipment[] newarray = new Equipment[capacity];
if (_size > 0)
{
if (_capacity > 0)
{
Array.Copy(_array, 0, newarray, 0, _size);
}
else
{
Array.Copy(_array, 0, newarray, 0, _array.Length);
Array.Copy(_array, 0, newarray, _array.Length, _capacity);
}
}
_array = newarray;
_capacity = _size;
}
public Equipment this[int index]
{
get{return this._array[index];}
set{this._array[index]=value;}
} public void Clear()
{
if (_capacity > 0)
Array.Clear(_array, 0, _size);
else
{
Array.Clear(_array, 0, _array.Length);
Array.Clear(_array, 0, _capacity);
}
_capacity = 0;
_size = 0;
} internal Object GetElement(int i)
{
return _array[i % _array.Length];
}
class EquipmentEnumerator : IEnumerator
{ private EquipmentCollection _ec;
private int _index;
private Object currentElement; internal EquipmentEnumerator(EquipmentCollection ec)
{
_ec = ec; _index = 0;
currentElement = _ec._array; if (_ec._size == 0)
_index = -1;
} public virtual bool MoveNext()
{
if (_index < 0)
{
currentElement = _ec._array; return false;
}
currentElement = _ec.GetElement(_index);
_index++; if (_index == _ec._size)
_index = -1; return true;
} public virtual void Reset()
{ if (_ec._size == 0)
_index = -1;
else
_index = 0; currentElement = _ec._array;
} public virtual Object Current
{
get
{
if (currentElement == _ec._array)
{
if (_index == 0)
throw new InvalidOperationException("无效操作");
else
throw new InvalidOperationException("无效操作");
} return currentElement;
}
}
}
}序列化代码:
EquipmentCollection myObject = new EquipmentCollection();
System.Xml.Serialization.XmlSerializer mySerializer=new XmlSerializer(typeof(EquipmentCollection));
StreamWriter myWriter = new StreamWriter("myFileName.xml");
mySerializer.Serialize(myWriter, myObject);
但是序列化以后发现XML为空[Serializable]
public class EquipmentCollection:System.Collections.ICollection
{ private Equipment[] _array=new Equipment[16];
private int _size=0;
private int _capacity=0; // 集合中最后一个有效元素
private const int _MinimumGrow = 4;
public EquipmentCollection()
{// _array = new Equipment[16];
// _capacity = 0;
// _size = 0;
}
#region interface require
//这里是必须通过实现提供的一组方法...
//----------------------------
public virtual void CopyTo(Array array, int index)
{
//在此演示中不支持...
throw new Exception("此实现中不支持此方法");
} public virtual int Count
{
get { return _size; }
} public virtual Object SyncRoot
{
get { return this; }
} public virtual bool IsSynchronized
{
get { return false; }
} public virtual IEnumerator GetEnumerator()
{
return new EquipmentEnumerator(this);
}
//---------------------------- #endregion// public Equipment Item[int index]
// {
// get{return this._array[index];}
// set{this._array[index]=value;}
// } public bool Add(Equipment et)
{
foreach(Equipment e in _array)
{
if(!(e==null))
{
if(e.ID ==et.ID) return false;
}
}
if (_size == _array.Length)
{
int newcapacity = _array.Length * 2;
if (newcapacity < _array.Length + _MinimumGrow)
{
newcapacity = _array.Length + _MinimumGrow;
}
SetCapacity(newcapacity);
}
_array[_capacity] = et;
_capacity = (_capacity + 1) % _array.Length;
_size++; return true;
}
private void SetCapacity(int capacity)
{
Equipment[] newarray = new Equipment[capacity];
if (_size > 0)
{
if (_capacity > 0)
{
Array.Copy(_array, 0, newarray, 0, _size);
}
else
{
Array.Copy(_array, 0, newarray, 0, _array.Length);
Array.Copy(_array, 0, newarray, _array.Length, _capacity);
}
}
_array = newarray;
_capacity = _size;
}
public Equipment this[int index]
{
get{return this._array[index];}
set{this._array[index]=value;}
} public void Clear()
{
if (_capacity > 0)
Array.Clear(_array, 0, _size);
else
{
Array.Clear(_array, 0, _array.Length);
Array.Clear(_array, 0, _capacity);
}
_capacity = 0;
_size = 0;
} internal Object GetElement(int i)
{
return _array[i % _array.Length];
}
class EquipmentEnumerator : IEnumerator
{ private EquipmentCollection _ec;
private int _index;
private Object currentElement; internal EquipmentEnumerator(EquipmentCollection ec)
{
_ec = ec; _index = 0;
currentElement = _ec._array; if (_ec._size == 0)
_index = -1;
} public virtual bool MoveNext()
{
if (_index < 0)
{
currentElement = _ec._array; return false;
}
currentElement = _ec.GetElement(_index);
_index++; if (_index == _ec._size)
_index = -1; return true;
} public virtual void Reset()
{ if (_ec._size == 0)
_index = -1;
else
_index = 0; currentElement = _ec._array;
} public virtual Object Current
{
get
{
if (currentElement == _ec._array)
{
if (_index == 0)
throw new InvalidOperationException("无效操作");
else
throw new InvalidOperationException("无效操作");
} return currentElement;
}
}
}
}序列化代码:
EquipmentCollection myObject = new EquipmentCollection();
System.Xml.Serialization.XmlSerializer mySerializer=new XmlSerializer(typeof(EquipmentCollection));
StreamWriter myWriter = new StreamWriter("myFileName.xml");
mySerializer.Serialize(myWriter, myObject);
解决方案 »
- 急急,c# winform RDLC报表的问题
- GDI+画图问题
- 十万火急!数据写进数据库时是空值,要怎么办啊?
- 如何实现datagrid一列的值可以修改!
- 这是用checkboxlist勾的 ,勾一个就动态创建第一张表 ,勾第二个就创建第二张表,要跟第一张表链接。
- 求除去html代码中的所有超链接的正则表达式
- 如何手动加载\卸载DLL文件?
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, erro
- 用表中某一字段的值填充dataset,怎样取出这些值?
- C#窗体Bitmap.FromFile内存不足
- 向给位高手请教一个高难度的问题:用C#实现SQL Server企业管理器的部分功能,请做过的朋友给一点建议
- 关于DataGrid列宽度调整
public class EquipmentCollection:System.Collections.ICollection , ISerializable
{
}
问题比较诡异~~
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
Person sam = new Person(); sam.name = "sam"; sam.age = 24;
System.Xml.Serialization.XmlSerializer xml=new XmlSerializer(typeof(Person));
System.IO.StreamWriter stream=new StreamWriter("sam.xml");
xml.Serialize(stream,sam); }
} [Serializable]
public class Person:System.Runtime.Serialization.ISerializable { public string name = null;
public int age = 0; public void GetObjectData(SerializationInfo info,StreamingContext context)
{
info.AddValue("Name",this.name ); } }返回的xml文件 和是否继承ISerializable 一样~
另外 类是需要放在Webservice上的,应该是用的Xml的序列化 所以我用XmlSerializer做的测试
用BinaryFormatter结果是正常的~ 比较郁闷 高手指点~