Je suis en train de développer une application qui utilise le dispositif de mouvement de saut et qui sera implémentée en utilisant C#, mon problème est que je veux stocker la liste qui contient les vecteurs dans ma base de données. J'ai donc pensé à une solution de transformation du vecteur en un tableau de flottants, le problème est que chaque liste contient un maximum et un minimum de 300 valeurs (stocker cela dans la base de données prend beaucoup de temps)."Le type n'est pas prévu et aucun contrat ne peut être déduit: erreur Leap.Vector". en utilisant le sérialiseur Protobuf-net
J'ai donc cherché d'autres moyens possibles de stockage et j'ai fini sur le sujet de la sérialisation .net. J'avais essayé d'implémenter la sérialisation .net intégrée. Pensé que cela a fonctionné, mais encore une fois il aura fallu environ une minute de sérialiser la liste. Donc une autre solution proposée sur le sujet est d'utiliser le protobuf-net. donc je l'avais essayé et installé en utilisant le programme d'installation du paquet nuget. Et a fini avec cette fonction (copié de la solution Fastest way to serialize and deserialize .NET objects)
public static byte[] Serialize(List<Vector> tData)
{
using (var ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, tData);
return ms.ToArray();
}
}
public static List<Vector> Deserialize(byte[] tData)
{
using (var ms = new MemoryStream(tData))
{
return ProtoBuf.Serializer.Deserialize<List<Vector>>(ms);
}
}
Mais l'exécution du code me conduire à l'erreur indiqué ci-dessus (le titre).
Je pense que l'erreur se produira à: ProtoBuf.Serializer.Serialize(ms, tData);
A quoi 'Vector' ressemble-t-il? Les types dans protobuf-net peuvent être configurés à l'exécution, mais j'ai besoin de quelques indices sur ce à quoi cela ressemble ... est-ce que la bibliothèque est disponible sur nuget, par exemple? –
Est-ce votre 'Leap.Vector'? https://developer.leapmotion.com/documentation/csharp/api/Leap.Vector.html Si oui, une solution identique à celle de [Aucun sérialiseur défini pour le type: System.Windows.Media.Media3D.Point3D] (https : //stackoverflow.com/q/33495897/3744182) devrait fonctionner. – dbc
Je * soupçonne * que tout ce dont vous avez besoin est: 'RuntimeTypeModel.Default.Add (typeof (Vector), false) .Add (" X "," Y "," Z ");' quelque part au début de votre application, et ça va commencer à fonctionner. Il est heureux d'inférer des contrats pour des types de type tuple, mais dans ce cas je pense qu'il y a des propriétés calculées supplémentaires qui le rendent confus (ne sachant pas comment mapper les propriétés calculées au constructeur). Très difficile à dire sans accès à 'Vector', cependant. L'approche de substitution associée à @dbc est une autre option. –