Pregunta

Tengo un código común para serializar un objeto de clase en mis métodos 3-4, por lo que estoy pensando en crear una función común para ese código y la función de llamada en todos los métodos

Estoy haciendo esto desde el siguiente código

DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

                json = Encoding.Default.GetString(ms.ToArray());

                ms.Close();

Quiero poner este código común en la función general seprate que devuelve la cadena Json y que acepta toda la clase como parámetro de entrada, ya que estoy convirtiendo toda la clase en un objeto Json. Intenté crear una función como

cadena pública GenerateJsonString (clase C1)

pero esto me está dando un error en la palabra clave " clase " diciendo que el tipo es requerido

¿Alguien puede decirme cómo puedo aceptar un objeto de clase completa en función o método por separado?

¿Fue útil?

Solución

Estás confundiendo una " clase " con un " objeto " ;. Serias un objeto, que es una instancia de una clase en particular (también conocido como " Tipo ").

Puedes crear un método tomando un parámetro del tipo base .NET para todos los objetos, " objeto " ;, como este:

public static string GenerateJsonString(object o) 
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        ser.WriteObject(ms, o);
        json = Encoding.Default.GetString(ms.ToArray());
        ms.Close();
        return json;
    }
}

Otros consejos

Escriba el parámetro como " objeto " ;. No puede pasar una clase como parámetro, solo una instancia de una clase, que en OOP se conoce como " objeto "

public string GenerateJsonString(object obj)

Si todos los objetos que le está pasando a este método son instancias de clases que derivan de una clase base común, entonces puede usar el polimorfismo y escribir el método para aceptar objetos que son instancias de la clase base. De lo contrario, todas las clases se derivan de System.Object .

No está claro a qué te refieres con " objeto de clase " ;. Si te refieres a un objeto, pasar una referencia al objeto como de costumbre pasa " todo el objeto " (bueno, una referencia a ello). Puedes acceder a todos los miembros.

Si desea pasar el tipo , debe declarar el parámetro como Tipo , pero sospecho que eso no es lo que realmente quieres.

Si desea escribir un método que acepte cualquier objeto, simplemente declare el parámetro como tipo Objeto :

public string GenerateJsonString(object x)
Por cierto,

personalmente no usaría Encoding.Default (que es específico del sistema) para convertir el binario en texto. ¿Qué codificación utiliza realmente el serializador? ¿Te permite pasar un TextWriter (por ejemplo, un StringWriter) en lugar de una secuencia?

Puedes aceptar un objeto. Una clase no se crea una instancia y no se puede pasar al método.

Intenta usar Type en lugar de class

public string GenerateJsonString(Type t1)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top