IEnumerable et sérialisation
Bonjour,
C'est la première fois que j'envoie a un WS un objet et je dois lui envoyer un objet de mon cru appelé "RecordSet" dont vous trouverer la déclaration ci dessous. Cette classe est contenue dans une librairie appelée MDA, et est partagée par le client et le webservice.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
[Serializable]
public class RecordSet : IEnumerable
{
#region Propriétés
public Device LocalDevice { get; set; }
public DateTime RecordingDay { get; set; }
public List<Record> RecordList { get; set; }
#endregion
#region Indexeurs
public Record this[int i]
{
get
{
return RecordList[i];
}
set
{
RecordList[i] = value;
}
}
#endregion
#region Constructeurs
public RecordSet()
{
RecordingDay = DateTime.Now;
LocalDevice = new Device();
RecordList = new List<Record>();
}
public RecordSet(DateTime dt, Record[] list)
{
RecordingDay = dt;
LocalDevice = new Device();
RecordList = new List<Record>(list);
}
#endregion
#region IEnumerable Membres
IEnumerator IEnumerable.GetEnumerator()
{
return new RecordSetEnum(RecordList);
}
#endregion
}
public class RecordSetEnum : IEnumerator, IDisposable
{
private List<Record> _list;
private int _position;
#region Constructeurs
public RecordSetEnum(List<Record> list)
{
_list = list;
Reset();
}
#endregion
#region IEnumerator Membres
public Record Current
{
get { return _list[_position]; }
}
public bool MoveNext()
{
return (++_position < _list.Count);
}
public void Reset()
{
_position = -1;
}
object IEnumerator.Current
{
get { return _list[_position]; }
}
#endregion
#region IDisposable Membres
public void Dispose()
{
return;
}
#endregion
} |
La génération de la classe ainsi que celle du ws se déroule sans erreur. Lors de l'exécution du WS j'ai une erreur ainsi que la trace du serveur de dev, que je n'arrive pas a m'expliquer
Citation:
Pour être sérialisables XML, les types qui héritent de IEnumerable doivent avoir une implémentation de Add(System.Object) à tous les niveaux de leur hiérarchie d'héritage. MDA.RecordSet n'implémente pas Add(System.Object).
Dès que je supprime la déclaration IEnumerable ainsi que la définition des méthodes membre dans la classes RecordSet, l'application se compile et s'exécute sans problème.
Merci a vous ;)