11
votes

Comment exclure des types spécifiques de la sérialisation?

i couronne sgen contre mon assemblage avec une tonne métrique de types. Je veux exclure 2 types de la sérialisation. Je ne semble pas être capable de trouver un moyen de le faire.

Je vois que sgen a un interrupteur / type pour spécifier un type spécifique, mais rien pour exclure un type spécifique.

existe-t-il un moyen d'exclure des types spécifiques de la sérialisation?


2 commentaires

Peut-être que je n'ai pas compris votre question, mais sgen ne génère que l'assemblage de sérialisation. Quel est le problème d'avoir deux autres classes là-bas?


Si vous souhaitez le faire, car SGen se plaint des noms de classe identiques, ouvrez votre fichier .csproj et vous pouvez trouver FALSE Tags. J'ai enlevé ceux en quittant sur seul et les erreurs sont parties.


4 Réponses :


-6
votes

Je ne sais pas si vous la recherchez, mais vous pouvez exclure vos propres classes de la sérialisation en mentionnant [non-sérialisée] avant la définition de la classe. Donc, si vous souhaitez exclure un type spécifique, vous devrez hériter de lui et créer votre propre classe

[NonSerialized]
public class Point
{
    public int x, y;
}


2 commentaires

Ce code ne doit pas compiler, car les seules cibles de l'attribut sont les champs.


Erreur 2 attribut 'non-séralized' n'est pas valide sur ce type de déclaration. Il n'est valable que sur les déclarations «champ».



3
votes

En plus de mettre les types, vous souhaitez exclure dans un assemblage différent, vous ne pouvez pas exclure les types de la génération de sérialisateur.

mise à jour

D'autres affiches ont mis au point des possibilités supplémentaires pour exclure des types spécifiques, avec une applicabilité variable basée sur votre cas d'utilisation.


2 commentaires

Je sais que c'est vieux. Mais qu'en est-il de supprimer le paramètre moins constructeur? Qui semble prévenir la classe de traitement de SGEN.


@Tom Oui, cela fonctionne pour moi. Envisagez de poster une réponse respective - je vais uppote.



1
votes

Vous pouvez essayer de changer l'accès des classes que vous souhaitez exclure de la sérialisation XML en marquant la classe comme interne code>, puis sgen.exe devrait ignorer cette classe.

internal class NotToBeSerialized
{
    ...
}


1 commentaires

Mais je dois exclure la génération pour les types que je dois utiliser depuis une autre assemblée.



1
votes

Pour éviter que la classe soit incluse dans le traitement de SGen, assurez-vous qu'il n'a pas de constructeur sans paramètre.

Comme expliqué par la réponse à cette question Pourquoi la classe XML-Serializable a besoin d'un constructeur sans paramètre , la sérialisation nécessite un paramètre de moins constructeur, de tout niveau d'autorisation, de travailler. Faire du constructeur naturel privé n'est pas suffisant , pour exclure si du traitement de SGEN.


0 commentaires