all groups > dotnet xml > august 2005 >
You're in the

dotnet xml

group:

XML Serialization of CollectionBase and FXcop



XML Serialization of CollectionBase and FXcop bezel
8/29/2005 9:12:01 AM
dotnet xml: 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;}
}
}
RE: XML Serialization of CollectionBase and FXcop bezel
8/29/2005 1:44:25 PM
Nevermind... I forgot to add the new of the collection into the default
constructor of the MethodParameterSet class.

[quoted text, click to view]
AddThis Social Bookmark Button