Pergunta

Eu tenho um código comum de serialização de um objeto de classe em meus 3-4 métodos, por isso estou pensando em criar uma função comum para essa função código e chamadas em todos os métodos

Estou doingn isso o seguinte código

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

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

                ms.Close();

Eu quero colocar esse código comum em função geral seprate que retorna string JSON e que aceitem toda a classe como parâmetro de entrada como eu estou convertendo toda a classe em um objeto JSON, eu tentei criar função como

GenerateJsonString public string (classe C1)

mas isso está me dando erro na palavra-chave "class", dizendo que tipo é necessário

Alguém pode me dizer como posso aceitar objeto de classe inteira no método ou função seprate

Foi útil?

Solução

Você está confundindo uma "classe" com um "objeto". Serializar um objeto, que é uma instância de uma determinada classe (aka "Type").

Você pode criar um método de tomar um parâmetro do tipo base .NET para todos os 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;
    }
}

Outras dicas

Digite o parâmetro como "objeto". Você não pode passar uma classe como um parâmetro, apenas uma instância de uma classe - que em OOP é referido como um "objeto"

public string GenerateJsonString(object obj)

Se todos os objetos que você está passando para este método são instâncias de classes que derivam de uma classe base comum, então você pode usar polimorfismo e escrever o método para aceitar objetos que são instâncias da classe base. Caso contrário, todas as classes são derivadas de System.Object.

Não está claro o que você quer dizer com "objeto de classe". Se você quer dizer um objeto, passando uma referência para o objeto como normal não passar "todo o objeto" (bem, uma referência a ele). Você pode obter a todos os membros.

Se você quiser passar o tipo em si, você deve declarar o parâmetro como Digite -. mas eu suspeito que não é realmente o que você quer

Se você quer escrever um método que irá aceitar qualquer objeto, basta declarar o parâmetro como tipo objeto :

public string GenerateJsonString(object x)

Pessoalmente, eu não usaria Encoding.Default (que é específico do sistema) para converter o binário para texto, por sinal - o que a codificação é o serializador realmente usando? Será que deixá-lo passar em um TextWriter (por exemplo, um StringWriter) em vez de um fluxo?

Você pode aceitar um objeto. Uma classe não é instanciado e ali para não pode ser passado para o método.

Tente usar Tipo em vez de classe

public string GenerateJsonString(Type t1)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top