我正在開發一個應用程序,它使用飛躍運動設備,並使用C#實現的過程中,我的問題是,我想存儲包含在我的數據庫中的向量的列表。所以我想過一個將矢量轉化爲浮點數組的解決方案,問題是每個列表包含最大值和最小值(存儲到數據庫中需要花費大量時間)。「類型不是預期的,並且不能推斷出合同:Leap.Vector」錯誤。使用Protobuf網絡串行器
因此,我尋找其他可能的存儲方式,並結束了.net序列化的主題。我曾嘗試實現內置的.net序列化。認爲它的工作,但仍然需要大約一分鐘序列化列表。因此,就該主題提出的另一個解決方案是使用protobuf-net。所以我試過並使用nuget軟件包安裝程序進行安裝。而結束了這個功能(從溶液中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);
}
}
但在運行代碼會導致我上面(標題)所述的錯誤。
我認爲會發生錯誤的:ProtoBuf.Serializer.Serialize(ms, tData);
這裏的'Vector'是什麼樣的? protobuf-net中的類型可以在運行時配置,但我需要一些線索來看看它是什麼樣的......例如nuget上的庫是否可用? –
這是你的'Leap.Vector'嗎? https://developer.leapmotion.com/documentation/csharp/api/Leap.Vector.html如果是這樣,一個相同的解決方案來自[無序列化器爲類型定義:System.Windows.Media.Media3D.Point3D](https ://stackoverflow.com/q/33495897/3744182)應該工作。 – dbc
我懷疑*你需要的是:'RuntimeTypeModel.Default.Add(typeof(Vector),false).Add(「X」,「Y」,「Z」);'在應用程序開始的某個地方,它將開始工作。很高興推斷出類似元組類型的契約,但在這種情況下,我認爲還有一些額外的計算屬性讓它感到困惑(不知道如何將計算出的屬性映射到構造函數)。不過,很難說不訪問'Vector'。 @dbc鏈接到的替代方法是另一種選擇。 –