Domanda

Ho un codice comune per serializzare un oggetto di classe nei miei metodi 3-4, quindi sto pensando di creare una funzione comune per quel codice e chiamare la funzione in tutti i metodi

Lo sto facendo dal seguente codice

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

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

                ms.Close();

Voglio mettere questo codice comune in una funzione generale separata che restituisce una stringa Json e che accetta tutta la classe come parametro di input mentre sto convertendo l'intera classe in un oggetto Json, ho provato a creare una funzione come

stringa pubblica GenerateJsonString (classe C1)

ma questo mi dà errore sulla parola chiave " class " dicendo che il tipo è richiesto

Qualcuno può dirmi come posso accettare l'intero oggetto di classe nel metodo o nella funzione separati

È stato utile?

Soluzione

Stai confondendo una classe " con un "oggetto". Serializzi un oggetto, che è un'istanza di una particolare classe (aka "Tipo").

Puoi creare un metodo prendendo un parametro del tipo base .NET per tutti gli oggetti, " oggetto " ;, in questo modo:

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;
    }
}

Altri suggerimenti

Digita il parametro come " oggetto " ;. Non puoi passare una classe come parametro, solo un'istanza di una classe, che in OOP viene definita "oggetto" "

public string GenerateJsonString(object obj)

Se tutti gli oggetti che passi a questo metodo sono istanze di classi che derivano da una classe base comune, puoi usare il polimorfismo e scrivere il metodo per accettare oggetti che sono istanze della classe base. Altrimenti, tutte le classi sono derivate da System.Object .

Non è chiaro cosa intendi per "oggetto di classe". Se intendi un oggetto, passare un riferimento all'oggetto normalmente passa "l'intero oggetto" (bene, un riferimento ad esso). Puoi ottenere tutti i membri.

Se si desidera passare il tipo stesso, è necessario dichiarare il parametro come Tipo - ma sospetto che non sia proprio quello che vuoi.

Se vuoi scrivere un metodo che accetti qualsiasi oggetto, dichiara semplicemente il parametro come type Oggetto :

public string GenerateJsonString(object x)

Personalmente non userei Encoding.Default (che è specifico del sistema) per convertire il binario in testo, a proposito: quale codifica sta usando il serializzatore? Ti consente di passare un TextWriter (ad esempio un StringWriter) anziché uno stream?

Puoi accettare un oggetto. Una classe non viene istanziata e non è possibile passarla al metodo.

Prova a utilizzare Tipo anziché la classe

public string GenerateJsonString(Type t1)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top