(注意:DictionaryはどこのProtoContract/ProtoMemberedクラスでもうまく動作します)この問題は、typeオブジェクトの場合にのみ発生します。Dictionary <string、object>をProtoBuf-netでシリアライズすると失敗する
辞書の辞書をシリアル化しようとしていました。
typeof(オブジェクト)が機能しません。すべき?私は文字列ベースの回避策を実装する必要がありますか?
このシナリオでは、オブジェクトは.netプリミティブにしかなりません。
[Test]
public void De_SerializeObjectDictionary2()
{
var d = new Dictionary<string, object>();
d.Add("abc", 12);
var ms = new MemoryStream();
var model = ProtoBuf.Meta.RuntimeTypeModel.Default;
//model.AutoAddMissingTypes = true;
//model.AutoCompile = true;
//model.InferTagFromNameDefault = true;
//model.Add(typeof (object), false);
//model.Add(typeof(Int32), true);
//model[typeof (object)].AddSubType(50, typeof (Int32));
model.Serialize(ms, d);
Serializer.Serialize<Dictionary<string,object>>(ms, d);
// <--- No serializer defined for type: System.Object
// or
//model.Add(typeof (object), false);
//Serializer.Serialize<Dictionary<string, object>>(ms, d);
//<-- Unexpected sub-type: System.Int32
ms.Position = 0;
var d2 = Serializer.Deserialize<Dictionary<string, object>>(ms);
}
私は先に時間のこれらのタイプを定義しようとしました...しかし、私は、彼らがこれを行うための欲求は、直接、既に持っているProtobufネット
//model.Add(typeof (object), false);
//model[typeof (object)].AddSubType(50, typeof (Int32));
/*
//model.Add(typeof(int), false);
//model.Add(typeof(string), false);
//model.Add(typeof(short), false);
//model.Add(typeof(DateTime), false);
//model.Add(typeof(long), false);
//model.Add(typeof(bool), false);
//model.Add(typeof(int[]), false);
//model.Add(typeof(string[]), false);
//model.Add(typeof(short[]), false);
//model.Add(typeof(DateTime[]), false);
//model.Add(typeof(long[]), false);
//model.Add(typeof(bool[]), false);
//model.Add(typeof(int?), false);
//model.Add(typeof(short?), false);
//model.Add(typeof(DateTime?), false);
//model.Add(typeof(long?), false);
//model.Add(typeof(bool?), false);
//model.Add(typeof(int?[]), false);
//model.Add(typeof(short?[]), false);
//model.Add(typeof(DateTime?[]), false);
//model.Add(typeof(long?[]), false);
//model.Add(typeof(bool?[]), false);
//model.Add(typeof(byte[]), false);
//model.Add(typeof(byte), false);
あなたは時間のすべての可能性のあるタイプを知っていますか?ここにはいくつの種類がありますか? –
はすべて、辞書のシリアライズ可能な型ですか? –
はい。ここに私が試みた主義があります。それらはすべてエラーを引き起こします。彼らはすでにProtobuf-netライブラリによって定義されていると思います。 – sgtz