J'écris certaines structures de données génériques personnalisées. Comment puis-je m'assurer que le type générique transmis peut être sérialisé par protobuf-net? Comme protobuf-net ne s'appuie pas sur des interfaces, je ne peux pas contraindre le paramètre type de cette façon. J'ai pensé au test d'exécution du type dans le constructeur, mais je ne peux même pas utiliser PrepareSerializer<T>
parce que cela dépend du type étant un type de référence. Je pourrais simplement essayer une sérialisation et une désérialisation, mais cela semble au mieux désordonné. Quelle est la meilleure façon de vérifier qu'un type générique donné peut être sérialisé?Comment déterminer si un paramètre de type générique peut être sérialisé par protobuf-net?
1
A
Répondre
1
XmlProtoSerializer doit faire une détermination similaire. Par exemple:
static int GetKey(TypeModel model, ref Type type, out bool isList)
{
if (model != null && type != null)
{
int key = model.GetKey(ref type);
if (key >= 0)
{
isList = false;
return key;
}
Type itemType = TypeModel.GetListItemType(type);
if (itemType != null)
{
key = model.GetKey(ref itemType);
if (key >= 0)
{
isList = true;
return key;
}
}
}
isList = false;
return -1;
}
Si cela renvoie une valeur négative, il ne peut pas être sérialisé. Je pourrais rendre ceci disponible dans un bool CanSerialize(Type)
plus soutenu si cela serait utile?
Questions connexes
- 1. Comment vérifier si un paramètre de type générique est nullable?
- 2. Déterminer si un type donné peut actuellement être résolu par un conteneur Castle Windsor
- 3. Déterminer si un type générique a une implémentation correspondant
- 4. Contraintes de classe génériques - puis-je spécifier que le type générique peut être sérialisé en XML?
- 5. Type de paramètre générique
- 6. Un Enum peut-il être sérialisé complètement?
- 7. Java fonte générique par type de paramètre
- 8. Comment créer un paramètre de type générique
- 9. Générique type paramètre wildcard
- 10. Le type 'System.Web.HttpRequest' ne peut pas être sérialisé
- 11. Upcasting avec un paramètre de type générique
- 12. Un type générique comme paramètre
- 13. Le type 'MyDTO' ne peut pas être sérialisé - Service Wcf
- 14. Comment déterminer la classe d'un type générique?
- 15. Comment puis-je vérifier si une valeur peut être transtypée en un type générique?
- 16. Déterminer si un répertoire peut être déplacé sur NTFS
- 17. Comment déterminer si un type implémente un type d'interface générique spécifique
- 18. Navigation La propriété peut être un type générique?
- 19. Comment obtenir le type de paramètre générique?
- 20. Force un paramètre de type générique à être un type de classe?
- 21. Le type de base .NET ne peut pas être sérialisé par WCF
- 22. passer le paramètre de type dynamique à un type générique
- 23. Comment détecter si le type est un autre type générique
- 24. Pourquoi une liste générique peut-elle être convertie en son paramètre de type?
- 25. Déterminer si un fichier peut être déplacé ou copié
- 26. Comment déterminer si T est un type de valeur ou une classe de référence en générique?
- 27. Un paramètre de type d'une classe générique peut-il être défini dynamiquement via une instance de type?
- 28. LinkedList ne peut pas être sérialisé?
- 29. Comment déterminer si un @selector veut un paramètre?
- 30. Comment lancer un pointeur vers un type de paramètre générique?
Je vais regarder dans la méthode 'GetKey', mais je pense que' Serializer.CanSerialize (Type) 'serait une méthode fantastique et utile! – dlras2
@Dan Je n'ai pas oublié à ce sujet - juste besoin de passer par oredev d'abord! –
Il n'y a pas d'urgence. (En fait, vous êtes le seul développeur gratuit que je connaisse qui s'excuse pour un retard après seulement deux jours.) Mais si vous pouviez mettre à jour cette réponse et me direz quand ça sortira, ce serait génial! En attendant, je vais vous accorder le bénéfice du doute et accepter cette réponse. =] – dlras2