继承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);

解决方案 »

  1.   

    需要实现 ISerializable 接口,自定义序列化[Serializable]
    public class EquipmentCollection:System.Collections.ICollection , ISerializable 
    {
    }
      

  2.   

    试了一下
    问题比较诡异~~
    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结果是正常的~ 比较郁闷 高手指点~