Frage

Ich habe einen gemeinsamen Code ein Klassenobjekts in meinen 3-4 Methoden der Serialisierung, also ich denke, eine gemeinsame Funktion für diesen Code zu erstellen und rufen Sie Funktion in allen Methoden

Ich bin doingn dies aus dem folgenden Code

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

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

                ms.Close();

ich diesen gemeinsamen Code in seprate allgemeine Funktion setzen wollen, die JSON-String zurückgibt und die ganze Klasse als Eingabeparameter akzeptieren, wie ich ganze Klasse in ein JSON-Objekt bin Umwandlung habe ich versucht, Funktion zu schaffen wie

public string GenerateJsonString (Klasse C1)

, aber das gibt mir Fehler auf dem Stichwort „Klasse“, sagte, dass Typ erforderlich ist

Kann mir jemand sagen, wie kann ich ganze Klasse Objekt in seprate Methode oder Funktion

akzeptieren
War es hilfreich?

Lösung

Sie sind verwirrend eine „Klasse“ mit einem „Objekt“. Sie serialisiert ein Objekt, das eine Instanz einer bestimmten Klasse ist (auch bekannt als „Typ“).

Sie können eine Methode erstellen einen Parameter des .NET-Basistyp für alle Objekte unter „Objekt“, wie folgt:

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

Andere Tipps

Geben Sie den Parameter als "Objekt". Sie können nicht eine Klasse als Parameter, nur eine Instanz einer Klasse übergeben - die in OOP als „Objekt“ bezeichnet wird,

public string GenerateJsonString(object obj)

Wenn alle Objekte, die Sie zu dieser Methode sind vorbei Instanzen von Klassen sind, die von einer gemeinsamen Basisklasse ableiten, dann können Sie Polymorphismus verwenden und die Methode schreiben Objekte zu akzeptieren, die Instanzen der Basisklasse sind. Ansonsten werden alle Klassen von System.Object abgeleitet.

Es ist nicht klar, was du mit „Klassenobjekt“ bedeuten. Wenn Sie ein Objekt bedeuten, eine Referenz auf das Objekt übergeben als normal bedeutet „das ganze Objekt“ (na ja, ein Verweis darauf) übergeben. Sie können bei allen Mitgliedern erhalten.

Wenn Sie die type selbst übergeben mögen, sollten Sie die Parameter wie Typ -. aber ich vermute, das ist nicht wirklich das, was Sie wollen

Wenn Sie eine Methode schreiben wollen, das jedes Objekt akzeptieren, erklären Sie die Parameter als Typ Objekt :

public string GenerateJsonString(object x)

Persönlich würde ich nicht verwenden Encoding.Default (der systemspezifisch ist), um die binären zu konvertieren, indem die Art und Weise in Text, - welche Codierung ist der Serializer wirklich verwenden? Ist es können Sie in einem Textwriter übergeben (zum Beispiel ein String) anstelle eines Strom?

Sie können ein Objekt übernehmen. Eine Klasse wird nicht instanziiert und dort nicht an die Methode übergeben werden.

Versuchen Sie statt Klasse mit Typ

public string GenerateJsonString(Type t1)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top