"部分的にはい、一部はありません"。
いるProtobuf-netは名前のタプルのない特定の知識を持っていない、とthe names are not available to library codeが、以降はバージョン2.2.0から、いるProtobufネットは、基本的に、位置の種類として扱い、ValueTuple<...>
種類の契約を推測することができます - Bid
はフィールド1、Ask
はフィールド2などとなります。GetProto<T>
のようなコードはではありません。は期待通りの結果をもたらします(a:名前を見ることができず、b:形状が大きくタプル)、細かいシリアル化の詳細(DataFormat
など)を制御することはできませんが、それはうまくいくはずです。
次は正常に動作します:
using ProtoBuf;
using System.Collections.Generic;
static class P
{
static void Main()
{
var obj = new MyType { FuturesCurveData = {
{ 1.0, (1, 2, 3, 4, 5, 6, 7, 8) },
{ 2.0, (2, 3, 4, 5, 6, 7, 8, 9) },
} };
var clone = Serializer.DeepClone(obj);
foreach(var pair in clone.FuturesCurveData)
{
System.Console.WriteLine($"{pair.Key}: {pair.Value}");
}
}
}
[ProtoContract]
class MyType
{
[ProtoMember(1)]
public SortedDictionary<double, (double Bid, double Ask, double Open, double High, double Low, double Close, int Volume, int OpenInt)> FuturesCurveData { get; } =
new SortedDictionary<double, (double Bid, double Ask, double Open, double High, double Low, double Close, int Volume, int OpenInt)>();
}
出力:
1: (1, 2, 3, 4, 5, 6, 7, 8)
2: (2, 3, 4, 5, 6, 7, 8, 9)
そして、ここではGetProto<MyType>()
が生み出すものだ - ではない、非常にそのような成功:サイドノートとして
syntax = "proto2";
package System;
message KeyValuePair_Double_ValueTuple_Double_Double_Double_Double_Double_Double_Int32_ValueTuple_Int32 {
optional double Key = 1;
optional ValueTuple_Double_Double_Double_Double_Double_Double_Int32_ValueTuple_Int32 Value = 2;
}
message MyType {
repeated KeyValuePair_Double_ValueTuple_Double_Double_Double_Double_Double_Double_Int32_ValueTuple_Int32 FuturesCurveData = 1;
}
message ValueTuple_Double_Double_Double_Double_Double_Double_Int32_ValueTuple_Int32 {
optional double Item1 = 1;
optional double Item2 = 2;
optional double Item3 = 3;
optional double Item4 = 4;
optional double Item5 = 5;
optional double Item6 = 6;
optional int32 Item7 = 7;
optional ValueTuple_Int32 Rest = 8;
}
message ValueTuple_Int32 {
optional int32 Item1 = 1;
}
、それはとなります。map<,>
キーの種類がint
またはstring
の場合、バグが発生した可能性があります(I have logged)。
これらの投票には、この質問と異なる点はありません。https://stackoverflow.com/questions/4763875/does-protobuf-net-support-nullable-types – screig
その質問には@screigというコードが含まれています。あなたの質問にいくつかのコードを追加できますか? – mjwills
@mjwillsそこに行く – screig