Ich bin dabei, eine Anwendung zu entwickeln, die das Schaltgerät verwendet und mit C# implementiert wird, mein Problem ist, dass ich die Liste speichern möchte, die die Vektoren in meiner Datenbank enthält. Also habe ich über eine Lösung des Transformierens des Vektors in ein Array von Gleitkommazahlen nachgedacht. Das Problem besteht darin, dass jede Liste ein Maximum und ein Minimum von 300 Werten enthält (das Speichern in der Datenbank kostet viel Zeit)."Typ wird nicht erwartet, und kein Vertrag kann abgeleitet werden: Leap.Vector" Fehler. Verwenden von Protobuf-net Serializer
So habe ich nach anderen Möglichkeiten der Speicherung suchen und ich endete auf dem Thema. NET Serialisierung. Ich hatte versucht, die integrierte .net-Serialisierung zu implementieren. Dachte, es hat geklappt, aber noch einmal dauert es ungefähr eine Minute, um die Liste zu serialisieren. Eine andere Lösung, die zu diesem Thema vorgeschlagen wird, ist die Verwendung des Protobuf-Netzes. also habe ich es versucht und installiert mit dem nugget-paketinstallationsprogramm. Und endete mit dieser Funktion nach oben (aus der Lösung kopiert 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);
}
}
aber den Code ausgeführt wird mich oben (der Titel) angegeben zu dem Fehler führen.
denke ich, wird der Fehler passieren bei: ProtoBuf.Serializer.Serialize(ms, tData);
Wie sieht 'Vector' hier aus? Typen in protobuf-net können zur Laufzeit konfiguriert werden, aber ich brauche einige Hinweise, wie es aussieht ... ist die Bibliothek beispielsweise auf nuget verfügbar? –
Ist das dein 'Leap.Vector'? https://developer.leapmotion.com/documentation/csharp/api/Leap.Vector.html Wenn ja, eine identische Lösung zu der von [Kein Serializer für Typ definiert: System.Windows.Media.Media3D.Point3D] (https : //stackoverflow.com/q/33495897/3744182) sollte funktionieren. – dbc
I * verdächtige * das alles, was Sie brauchen, ist: 'RuntimeTypeModel.Default.Add (typeof (Vector), false) .Add (" X "," Y "," Z ");' irgendwo am Anfang Ihrer App, und es wird anfangen zu arbeiten. Es ist glücklich, Verträge für Tupel-ähnliche Typen abzuleiten, aber in diesem Fall denke ich, dass es einige zusätzliche berechnete Eigenschaften gibt, die es verwirrend machen (nicht zu wissen, wie man die berechneten Eigenschaften dem Konstruktor zuordnen kann). Sehr schwer zu sagen ohne Zugang zu 'Vector'. Der Surrogat-Ansatz, mit dem @dbc verknüpft ist, ist eine weitere Option. –