Nevermind... I forgot to add the new of the collection into the default
constructor of the MethodParameterSet class.
[quoted text, click to view] "bezel" wrote:
> I have an object which has a collection in it which I serialize using the
> XmlSerializer. According to FXCop, it is a bad practice to include the set
> accessor on the collection because it could result in non-type safe behavior.
> Fine. So I remove the set accession. The Collection inherits from
> CollectionBase, so it already includes the method MSDN says I need to allow
> the XmlSerializer to work (Add, Count and Item). But the serialization
> fails. I can add the set accessor back in, and everything works, but this
> isn't a good practice. Below is the code for my classes.
>
> Can anyone see the mistake I am making? Or is it a bug?
>
> #region ReturnTypeCollection
> [Serializable]
> public class ReturnTypeCollection : CollectionBase
> {
> // Methods
> public ReturnTypeCollection( ) { }
>
> public ReturnType this[ int index ]
> {
> get
> {
> return( (ReturnType) List[index] );
> }
> set
> {
> List[index] = value;
> }
> }
>
> public int Add( ReturnType value )
> {
> return( List.Add( value ) );
> }
>
> public int IndexOf( ReturnType value )
> {
> return( List.IndexOf( value ) );
> }
>
> public void Insert( int index, ReturnType value )
> {
> List.Insert( index, value );
> }
>
> public void Remove( ReturnType value )
> {
> List.Remove( value );
> }
>
> public bool Contains( ReturnType value )
> {
> return( List.Contains( value ) );
> }
>
> // Provide the strongly typed member for ICollection.
> public void CopyTo(ReturnType[] array, int index)
> {
> ((ICollection)this).CopyTo(array, index);
> }
>
> }
> #endregion
>
> [Serializable]
> public class MethodParameterValue
> {
> private int intParameterValue;
> private string stringParameterValue;
> private DateTime dateTimeParameterValue;
> private double doubleParameterValue;
> private object objectParameterValue;
> private ReturnTypeCollection returnTypesParameterValue;
> private BuildMode buildModeParameterValue;
>
> public MethodParameterValue()
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
> }
>
> public MethodParameterValue(int inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
>
> intParameterValue = inValue;
> }
>
> public MethodParameterValue(double inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
>
> doubleParameterValue = inValue;
> }
>
> public MethodParameterValue(string inValue)
> {
> dateTimeParameterValue = System.DateTime.MinValue;
> stringParameterValue = inValue;
> }
>
> public MethodParameterValue(DateTime inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = inValue;
> }
>
> public MethodParameterValue(object inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
>
> objectParameterValue = inValue;
> }
>
> public MethodParameterValue(ReturnTypeCollection inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
>
> returnTypesParameterValue = inValue;
> }
>
> public MethodParameterValue(BuildMode inValue)
> {
> stringParameterValue = "";
> dateTimeParameterValue = System.DateTime.MinValue;
>
> buildModeParameterValue = inValue;
> }
>
> public int IntParameterValue
> {
> get { return intParameterValue;}
> set { intParameterValue = value;}
> }
>
> public double DoubleParameterValue
> {
> get { return doubleParameterValue;}
> set { doubleParameterValue = value;}
> }
>
> public string StringParameterValue
> {
> get { return stringParameterValue;}
> set { stringParameterValue = value;}
> }
>
> public DateTime DateTimeParameterValue
> {
> get { return dateTimeParameterValue;}
> set { dateTimeParameterValue = value;}
> }
>
> public object ObjectParameterValue
> {
> get { return objectParameterValue;}
> set { objectParameterValue = value;}
> }
>
> public ReturnTypeCollection ReturnTypesParameterValue
> {
> get { return returnTypesParameterValue;}
> set { returnTypesParameterValue = value;}
> }
>
> public BuildMode BuildModeParameterValue
> {
> get { return buildModeParameterValue;}
> set { buildModeParameterValue = value;}
> }
> }