(注意:T是一些ProtoContract/ProtoMembered類的字典正常工作。)這個問題只發生在使用類型對象的我。在ProtoBuf-net中序列化字典<字符串,對象>失敗
我試圖序列化字典工作的字典。
typeof(object)不起作用。應該是?我應該實施一個基於字符串的工作嗎?
在這種情況下,對象將永遠只是一個.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