Question

J'ai un code commun de sérialisation d'un objet de classe dans mes méthodes 3-4, je pense donc créer une fonction commune pour ce code et une fonction d'appel dans toutes les méthodes

Je le fais à partir du code suivant

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

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

                ms.Close();

Je veux mettre ce code commun dans une fonction générale seprate qui retourne une chaîne Json et qui accepte une classe entière comme paramètre d'entrée car je convertis une classe entière en un objet Json. J'ai essayé de créer une fonction comme

.

chaîne publique GenerateJsonString (classe C1)

mais cela me donne une erreur sur le mot clé "classe". en disant que le type est requis

Quelqu'un peut-il me dire comment puis-je accepter un objet de classe entière dans une méthode ou fonction seprate

Était-ce utile?

La solution

Vous confondez une "classe" avec un "objet". Vous sérialisez un objet, qui est une instance d'une classe particulière (ou "Type").

Vous pouvez créer une méthode prenant un paramètre du type de base .NET pour tous les objets, "objet", comme ceci:

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

Autres conseils

Saisissez le paramètre sous la forme "objet". Vous ne pouvez pas passer une classe en tant que paramètre, mais seulement une instance de classe - appelée POO dans un objet, sous la forme d'un "objet"

.
public string GenerateJsonString(object obj)

Si tous les objets que vous transmettez à cette méthode sont des instances de classes dérivées d'une classe de base commune, vous pouvez utiliser le polymorphisme et écrire la méthode pour accepter les objets qui sont des instances de la classe de base. Sinon, toutes les classes sont dérivées de System.Object .

Ce que vous entendez par "objet de classe" n'est pas clair. Si vous entendez un objet, le passage normal d'une référence à l'objet passe par "l'objet entier". (bon, une référence à cela). Vous pouvez obtenir tous les membres.

Si vous souhaitez transmettre le type lui-même, vous devez déclarer le paramètre comme suit: Type - mais je soupçonne que ce n'est pas vraiment ce que vous voulez.

Si vous souhaitez écrire une méthode qui acceptera n'importe quel objet, déclarez simplement le paramètre en tant que type Objet :

public string GenerateJsonString(object x)

Personnellement, je n’utiliserais pas Encoding.Default (qui est spécifique au système) pour convertir le fichier binaire en texte - au fait, quel encodage le sérialiseur utilise-t-il vraiment? Est-ce que cela vous permet de passer un TextWriter (par exemple un StringWriter) au lieu d'un flux?

Vous pouvez accepter un objet. Une classe n'est pas instanciée et ne peut pas être transmise à la méthode.

Essayez d'utiliser Type au lieu de classe

public string GenerateJsonString(Type t1)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top