Código de Anlysis Rule CA2000 / CA2202

Estoy tratando de asegurar que mi codificación siga la correcta eliminación de los objetos, por lo que estoy aplicando estas reglas como errores. Pero estoy teniendo problemas con esta sección de código

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

class MyClass
{  
    public String ToXml()
    {
        var objSerializer = 
            new DataContractSerializer(GetType());
        var objStream = new MemoryStream();
        StreamReader objReader;

        String strResult;
        try
        {
            // Serialize the object
            objSerializer.WriteObject(objStream, this);

            // Move to start of stream to read out contents
            objStream.Seek(0, SeekOrigin.Begin);

            objReader = new StreamReader(objStream);

            try
            {
                // Read Contents into a string
                strResult = objReader.ReadToEnd();
            }
            finally
            {
                objReader.Dispose();
            }
        }
        finally
        {
            if (objStream != null)
            {
                // objStream.Dispose();
            }
        }

        return strResult;
    }
}

Si yo comentoobjStream.Dispose() Obtengo CA2000 porque no estoy eliminando el objeto, pero si elimino el comentario, entonces dice que estoy eliminando más de una vez.

¿Qué más es disponer el objeto? ¿O simplemente estoy haciendo esto mal cuando trato con múltiples flujos?